【发布时间】:2014-10-23 13:35:03
【问题描述】:
我想将 num 作为 8 位输入,然后在时钟的每个上升沿将其移出,并在输出“res”上移出。代码如下所示。但是在模拟时,它并没有给出预期的结果。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
entity shiftreg is
port (
num : in std_logic_vector (7 downto 0);
clk : in std_logic;
res : out std_logic_vector (7 downto 0)
);
end entity;
architecture behav of shiftreg is
signal temp_num : std_logic_vector (7 downto 0):= "00000000";
begin
process(num)
begin
if(num' event) then
temp_num <= num;
res<=temp_num;
end if;
end process;
process(clk)
begin
if(rising_edge(clk)) then
temp_num <= shr(temp_num,"01");
res<=temp_num;
end if;
end process;
end behav;
【问题讨论】:
-
您有多个问题。首先,您从多个进程驱动
temp_num和res,这将导致这些信号的争用。其次,您似乎试图将temp_num用作局部变量,但事实并非如此。见How does signal assignment work in a process?。更重要的是,从算法上讲,您到底要做什么还不清楚。您是否尝试加载num一次然后旋转几次?您是否要连续转换它? -
感谢您的回复,是的,我正在尝试连续转换它。
标签: vhdl