Verilog 如何处理 posege 与 VHDL 的rising_edge()?

问题描述 投票:0回答:1

我正在学习 Verilog 的课程,并遇到了一些对我来说有点奇怪的事情。 如果我用 VHDL(我更习惯)编写 DFF,我会这样做:

DFF : process(CLK, RESET_N)
begin

    if RESET_N = '0' then
        Q <= '0';
    elsif rising_edge(CLK) then
        Q <= D;
    end if;

end process DFF;

我在 Verilog 中尝试了类似的方法:

always @ (clk, reset_n) begin

    if(reset_n == 0) begin
        q = 0;
    end else if(posedge clk) begin
        q = d;
    end

end

但是,在执行此操作时,我收到编译错误 - 靠近“thought”:语法错误,意外的 posege。 我使用 Questasim 作为我的模拟器。

我的问题是,Verilog 如何处理

posedge
以及它与 VHDL 的
rising_edge
有何不同? 我只能在
always
块的敏感度列表内使用 Verilog 中的 posege 吗?

verilog vhdl
1个回答
0
投票

posedge
从技术上讲是 Verilog 中的“事件表达式”。这不是一个表达。
if
语句的语法是
if(expression)
,所以你运气不好。

Verilog 和 VHDL 版本略有不同。

rising_edge
是在
std_logic_1164
中定义的函数。基本上,如果信号是
0
L
,现在是
1
H
,则表示有上升沿。 Verilog的
posedge
由LRM定义,包括
x
z
。请参阅 2005 LRM 的第 133 页,但请注意,例如,
0
z
posedge

您可以在此处找到触发器等效项(以及许多其他 Verilog/VHDL 等效项)。

© www.soinside.com 2019 - 2024. All rights reserved.