我有一个大学的求职信,其中有以下内容
目标:在屏幕上移动图像。
输入:8 x 8图像
命令:00 –向右移动图像; 01-向右移动图像; 10-向上移动图像; 11-向下移动图像。
根据插入的命令,图像沿插入命令的方向移动一个像素。
EDIT1 :我编写了以下内容,代码编译无误,但输出为空
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.numeric_std.all;
ENTITY image_bit IS
PORT (bv1, bv2, bv3, bv4, bv5, bv6, bv7, bv8 : IN UNSIGNED (7 DOWNTO 0);
sel : IN UNSIGNED (1 DOWNTO 0);
ot1, ot2, ot3, ot4, ot5, ot6, ot7, ot8 : OUT UNSIGNED (7 DOWNTO 0));
END image_bit;
ARCHITECTURE img_trans OF image_bit IS
BEGIN
mover_direita: PROCESS(sel)
BEGIN
IF (sel = "00") THEN
ot1 <= bv1 srl 1;
ot2 <= bv2 srl 1;
ot3 <= bv3 srl 1;
ot4 <= bv4 srl 1;
ot5 <= bv5 srl 1;
ot6 <= bv6 srl 1;
ot7 <= bv7 srl 1;
ot8 <= bv8 srl 1;
END IF;
END PROCESS mover_direita;
mover_esquerda: PROCESS(sel)
BEGIN
IF (sel = "01") THEN
ot1 <= bv2;
ot2 <= bv3;
ot3 <= bv4;
ot4 <= bv5;
ot5 <= bv6;
ot6 <= bv7;
ot7 <= bv8;
ot8 <= "00000000";
END IF;
END PROCESS mover_esquerda;
mover_cima: PROCESS(sel)
BEGIN
IF (sel = "10") THEN
ot1 <= bv2;
ot2 <= bv3;
ot3 <= bv4;
ot4 <= bv5;
ot5 <= bv6;
ot6 <= bv7;
ot7 <= bv8;
ot8 <= "00000000";
END IF;
END PROCESS mover_cima;
mover_baixo: PROCESS(sel)
BEGIN
IF (sel = "11") THEN
ot1 <= "00000000";
ot2 <= bv1;
ot3 <= bv2;
ot4 <= bv3;
ot5 <= bv4;
ot6 <= bv5;
ot7 <= bv6;
ot8 <= bv7;
END IF;
END PROCESS mover_baixo;
END img_trans;
答案 0 :(得分:0)
您有4个不同的过程试图驱动ot*
的值。将这些组合到一个过程中,并使用CASE
语句(如果需要,也可以使用IF ... ELIF
)根据您的sel
输入选择不同的状态。例如:
--snip
move: PROCESS(sel)
BEGIN
CASE sel IS
WHEN "00" =>
ot1 <= bv1 srl 1;
ot2 <= bv2 srl 1;
--etc.
WHEN "01" =>
ot1 <= bv2;
ot2 <= bv3;
--etc.
WHEN "10" =>
--etc.
WHEN "11" =>
--etc.
WHEN OTHERS =>
--one bit of sel is X, Z, H, L or U.
--this should be an invalid state
END CASE;
END PROCESS move;
--snip
顺便说一句,在进程敏感度列表中仅包含sel
意味着如果仅更改bv*
输入,则输出不会更改。这可能不是您的预期行为。如果不希望这样做,请将bv1, bv2, bv3, etc.
添加到您的过程敏感性列表中。