签署 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-selects 和 aggregate:
dst <= (others => src(7));
dst(7 downto 0) <= src(7 downto 0);
第一行用src
的第7位填充dst
的所有位;第二行用 src
.
的位 7:0 覆盖 dst
的位 7:0
如何在 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-selects 和 aggregate:
dst <= (others => src(7));
dst(7 downto 0) <= src(7 downto 0);
第一行用src
的第7位填充dst
的所有位;第二行用 src
.
dst
的位 7:0