我正在尝试编写仅使用NOR门的D触发器的特定版本:
以下是门级图:
我在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个等式。
答案 0 :(得分:0)
您的问题如下:
always @(negedge CLK) begin
您的电路实际创建的是R
,S
,QN
和Q
中的每一个的单独触发器,因为您已声明阻止为边缘触发(这是negedge CLK
的含义)。如果你想要一个纯粹的组合电路(就像你的门级图所示)你应该使用always @(*)
块。
请注意,Quartus II有一个名为 RTL Viewer 的有用工具(工具 - >网表查看器 - > RTL查看器),它显示了块级示意图你的合成电路。如果你看一下,你会发现你实际上用你的代码创建了四个触发器(和一些逻辑),而不是一个。