签署 PIC24 的扩展指令

Sign Extended Instruction for PIC24

如何在 PIC24 的 VHDL(在 ALU 中)中实现符号扩展指令? 我需要执行以下说明,但我不知道如何执行 SE。

LOOP: 
   mov 0x1020, w1 ; INW0=ff7f
   mov 0x1022, w2 ; INW1=8001
   ior w2, w2, w3 ; N=1
   se  w1, w1  ; N=0
REP1:
   bra n, REP1
   add w1, w1, w5
   se  w5, w6  , N=1
   bra n, CONT1
REP2:
   bra rep2
CONT1:
   mov w6, 0x1024
   bra LOOP

This is SE in pic24's manual

查看 PIC24 的 Wikipedia page 表明 SE 指令具有以下行为:

SE src,dst C Z N dst ← sign_extend(src), copy bit 7 to bits 15:8

将位 7 复制到位 15:8 可以使用 连接运算符 (&) 完成,它将数组连接在一起以形成更大的数组:

dst <= src(7) & src(7) & src(7) & src(7) & src(7) & src(7) & src(7) & src(7) & src(7 downto 0);

这可以通过将其分成两行并使用 part-selectsaggregate:

dst <= (others => src(7));
dst(7 downto 0) <= src(7 downto 0);

第一行用src的第7位填充dst的所有位;第二行用 src.

的位 7:0 覆盖 dst 的位 7:0