Verilog D翻转翻牌

时间:2015-11-29 22:11:41

标签: verilog

我正在尝试编写仅使用NOR门的D触发器的特定版本:

以下是门级图:

NOR Gate D Flip Flop

我在Verilog中使用的代码:

module DFlipFlop(D,CLK,Q,QN);
    input D, CLK;
    output Q, QN;
    reg Q, QN, R, S;

always @(negedge CLK) begin
    R = ~(~(~(D|S)|R)|CLK);
    S = ~(~(D|S)|R|CLK); 
    Q = ~(R|QN);
    QN = ~(S|Q);
end

endmodule

然后我将已编译的程序上传到PLD并且它没有翻转,我无法弄清楚原因。我已经尝试了很多不同的东西。

请注意,我必须在程序中使用R,S,Q和QN中的4个等式。

1 个答案:

答案 0 :(得分:0)

您的问题如下:

always @(negedge CLK) begin

您的电路实际创建的是RSQNQ中的每一个的单独触发器,因为您已声明阻止为边缘触发(这是negedge CLK的含义)。如果你想要一个纯粹的组合电路(就像你的门级图所示)你应该使用always @(*)块。

请注意,Quartus II有一个名为 RTL Viewer 的有用工具(工具 - >网表查看器 - > RTL查看器),它显示了块级示意图你的合成电路。如果你看一下,你会发现你实际上用你的代码创建了四个触发器(和一些逻辑),而不是一个。