我有一段代码需要一个接一个地执行。例如,我有一个加法slv_reg2 <= slv_reg0 + slv_reg1;
,然后我需要从数字中减去结果。
architecture IMP of user_logic is
signal slv_reg0 : std_logic_vector(0 to C_SLV_DWIDTH-1); --32 bits wide
signal slv_reg1 : std_logic_vector(0 to C_SLV_DWIDTH-1);
signal slv_reg2 : std_logic_vector(0 to C_SLV_DWIDTH-1);
signal slv_reg3 : std_logic_vector(0 to C_SLV_DWIDTH-1);
signal flag : bit := '0';
begin
slv_reg2 <= slv_reg0 + slv_reg1;
flag <= '1';
process (flag)
begin
IF (flag = '1') THEN
slv_reg3 <= slv_reg0 - slv_reg2;
END IF;
end process;
end IMP;
我还没有测试过上面的代码,但如果我的想法是正确的,我想要一些反馈。 process
中包含的内容需要按顺序运行,如何使此部分也并行运行?
总之,我有两个需要按顺序执行的代码块,但代码itselft应该并行运行。
- UPDATE -
begin
slv_regX <= (slv_reg0 - slv_reg1) + (slv_reg2 - slv_reg3) +(slv_reg4 - slv_reg5); --...etc
process(clk) -- Process for horizontal counter
begin
if(rising_edge(clk)) then
if(flag = 1) then
flag <= 0;
end if;
end if;
end process;
答案 0 :(得分:2)
它是并发的,而不是并行的。只需使用中间信号
我担心你关于VHDL的思考过程并不完全正确。您承认第一个任务“并行”发生,但您必须意识到该过程也与其余语句同时运行。只有在内部过程中发生的事情才会按顺序进行评估 - 每次灵敏度列表中的任何信号都会发生变化。
我需要对你需要的东西做出很多假设,但也许你只是在这种风格之后:
c <= a + b;
e <= d - c;
信号e
始终包含d-(a+b)
。如果你不能立即理解为什么 - 这就是并发和并行之间的区别所在。它正在不断评估 - 就像你用铜线连接电路一样。
如果你真正需要的是基于时钟发生的事情 - 你真的还没有你的例子,我建议先查看示例和教程。一旦您提供更完整的VHDL代码,人们将乐意为您提供帮助。
示例中的问题
假设您打算编写可合成的VHDL,您的代码会出现一些问题:
试一试
我还没有测试过上面的代码,但是
你真的应该。查找代码示例,教程,去玩!