- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在大学类(class)中使用 VHDL 进行了一段时间的开发,我认为我了解它的工作原理,但有时我意识到我实际上并不了解它。
这是我的问题:
正如我所理解的,如果一个信号在进程的敏感列表中,那么只要该信号改变值,该进程就会“执行”。
所以我问,这2段代码有什么区别:
process(clk) is
begin
if(clk = '1') then
--Do Something
end if;
end process;
process(clk) is
begin
if(rising_edge(clk)) then
--Do Something
end if;
end process;
最佳答案
模拟:
让我们看看 VHDL 信号值是如何在 VHDL 中定义的。您可以在 ieee.std_logic_1164
中找到这些定义。图书馆。
通常,信号声明为 std_logic
这是 std_ulogic
的解析子类型定义如下:
type STD_ULOGIC is ( 'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
rising_edge
函数已定义,始终在 std_logic_1164 库中:
function rising_edge (signal s : STD_ULOGIC) return BOOLEAN is
begin
return (s'event and (To_X01(s) = '1') and
(To_X01(s'last_value) = '0'));
end function rising_edge;
function To_X01 (s : STD_ULOGIC) return X01 is
begin
return (cvt_to_x01(s));
end function To_X01;
----------------------------------------------------------
-- table name : cvt_to_x01
--
-- parameters :
-- in : std_ulogic -- some logic value
-- returns : x01 -- state value of logic value
-- purpose : to convert state-strength to state only
--
-- example : if (cvt_to_x01 (input_signal) = '1' ) then ...
--
----------------------------------------------------------
constant cvt_to_x01 : logic_x01_table := (
'X', -- 'U'
'X', -- 'X'
'0', -- '0'
'1', -- '1'
'X', -- 'Z'
'X', -- 'W'
'0', -- 'L'
'1', -- 'H'
'X' -- '-'
);
rising_edge
函数仅适用于以下 [last_value;value] 对:
Lacking signal assignment neither process produce simulation events. Lacking an assignment target the first produces no level sensitive sequential logic (transparent latch) in synthesis. Lacking an assignment target the second produces no edge triggered sequential logic (register) in synthesis. Unlike grorel's Quartus prime other synthesis tools aren't guaranteed to produce a register for his output1. See IEEE Std 1076.6-2004 (withdrawn) 6.1.2.1 Rising (positive) edge clock., 6.2.1.1 Level-sensitive storage from process with sensitivity list (requires input signals in sensitivity list).
process(clk) is
begin
if(clk = '1') then
output1 <= input1;
end if;
end process;
关于vhdl - raise_edge() 与进程敏感度列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50909128/
我目前有一个流量非常高的服务(大约 1000 个连接/秒,并且这不能再通过优化来减少)。直到 1 周前,我还在 AWS 工作,并调整了我的一些 apache/NGNIX 配置来处理该负载。完全没有问题
我是一名优秀的程序员,十分优秀!