作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有如下两个过程。
如果说 A=1、B=2 和 C=3,模拟中发生的是上升沿 B=1 和 C=2,这就是我想要的结果。
但是我能保证在将设计实现到 fpga 中时也是如此吗?
让我担心的是与进程 BC 中的额外 if 状态相关的延迟。
AB : process(A,clk)
begin
if rising_edge(clk) then
B <= A;
end if;
end process;
BC : process(B,clk)
begin
if rising_edge(clk) then
if (some_statement) then
C <= B;
end if;
end if;
end process;
最佳答案
B 将采用 A 的值 (B=1),C 将采用 B 的值 (C=2)。
但是,我猜你实际上并没有描述你想要的。问题是您在两个进程的敏感列表中有 A 和 B。这意味着在进程 AB 中,每次 A 更改时以及 rising_edge(clk)
为真时,B 都会更改。这同样适用于进程 BC。假设你想描述两个串联的寄存器,你的代码应该是
AB : process(clk)
begin
if rising_edge(clk) then
B <= A;
end if;
end process;
BC : process(clk)
begin
if rising_edge(clk) then
if (some_statement) then
C <= B;
end if;
end if;
end process;
在这种情况下,如果您将此代码综合到 FPGA 上,您将推断出两个寄存器。进程 BC 中的寄存器将使用连接到 some_statement
bool 输出的寄存器使能信号。如果 some_statement
已经是一个单一的 std_logic
信号,这不会引入额外的延迟但需要一些路由资源,所以你仍然应该避免在你不真正使用的地方使用启用信号需要它。
关于vhdl - 如何在实践中评估流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12066815/
我是一名优秀的程序员,十分优秀!