VHDL或verilog SR锁存器
我正试图用带有启用信号C的与非门的SR锁存器对我的NEXYS2板进行编程。我的输入是(S,R,C),而输出是(Q,Qbar)。下面是一些VHDL代码,我尝试过,但不断出错。如果有助于任何人理解我的问题,示意图如下。如果你在verilog中知道,也没关系。 先谢谢你VHDL或verilog SR锁存器,vhdl,verilog,Vhdl,Verilog,我正试图用带有启用信号C的与非门的SR锁存器对我的NEXYS2板进行编程。我的输入是(S,R,C),而输出是(Q,Qbar)。下面是一些VHDL代码,我尝试过,但不断出错。如果有助于任何人理解我的问题,示意图如下。如果你在verilog中知道,也没关系。 先谢谢你 process(S,R,C,Q,Qbar) begin if (C = '1') then Q <= (R nand Qbar); Qbar <= (S nand Q); e
process(S,R,C,Q,Qbar)
begin
if (C = '1') then
Q <= (R nand Qbar);
Qbar <= (S nand Q);
end if;
end process;
过程(S、R、C、Q、Qbar)
开始
如果(C='1'),则
首先,您对原理图的实现是不正确的:R应该是
~S,S应该是~R。请尝试在S或R等于1的情况下跟踪逻辑
当C为1时,输出应设置为高
更正了Verilog(我这里只有Altera和Verilog):
以及来自正时分析仪的警告,表明其分析了两个组合
环作为闩锁。技术观点看起来似乎有道理,但你有一个
此编码样式存在问题,可能会导致问题
问题在于,您只显式地编写了反馈路径的代码,但是您还需要
让合成器推断闩锁。您的代码包括if(C='1')
,因此
当C不是1时,合成器推断内存行为-锁存器。但是,
是没有意义的,因为您还明确地告诉它闩锁的位置
您的反馈路径。不要两者都做;认为任何
合成器足够聪明,可以理解你们真正的意思。这里有一个
对您想要的内容毫无疑问的版本:
module top(
input wire S, R, C,
output wire Q, Qbar);
wire S2 = ~(C & S);
wire R2 = ~(C & R);
assign Q = ~(S2 & Qbar);
assign Qbar = ~(R2 & Q);
endmodule
相反,这会给出两个“发现2个节点的组合循环”警告,如下所示:
你会想到的。这也综合了Ok,RTL/技术视图看起来不错,
乍一看
标准免责声明:计时分析器不擅长使用
组合循环。如果你只是在玩,这一切可能都会起作用
但如果这是一个真正的设计,你需要认真考虑你的设计
约束,以及分析器是否实际跟踪了
反馈路径(可能没有)。你需要用sdf做一个定时sim卡
返回注释以确认其实际工作。首先,您的原理图实现不正确:R应该是
~S,S应该是~R。请尝试在S或R等于1的情况下跟踪逻辑
当C为1时,输出应设置为高
更正了Verilog(我这里只有Altera和Verilog):
以及来自正时分析仪的警告,表明其分析了两个组合
环作为闩锁。技术观点看起来似乎有道理,但你有一个
此编码样式存在问题,可能会导致问题
问题在于,您只显式地编写了反馈路径的代码,但是您还需要
让合成器推断闩锁。您的代码包括if(C='1')
,因此
当C不是1时,合成器推断内存行为-锁存器。但是,
是没有意义的,因为您还明确地告诉它闩锁的位置
您的反馈路径。不要两者都做;认为任何
合成器足够聪明,可以理解你们真正的意思。这里有一个
对您想要的内容毫无疑问的版本:
module top(
input wire S, R, C,
output wire Q, Qbar);
wire S2 = ~(C & S);
wire R2 = ~(C & R);
assign Q = ~(S2 & Qbar);
assign Qbar = ~(R2 & Q);
endmodule
相反,这会给出两个“发现2个节点的组合循环”警告,如下所示:
你会想到的。这也综合了Ok,RTL/技术视图看起来不错,
乍一看
标准免责声明:计时分析器不擅长使用
组合循环。如果你只是在玩,这一切可能都会起作用
但如果这是一个真正的设计,你需要认真考虑你的设计
约束,以及分析器是否实际跟踪了
反馈路径(可能没有)。你需要用sdf做一个定时sim卡
返回注释以确认其实际工作。首先,您的原理图实现不正确:R应该是
~S,S应该是~R。请尝试在S或R等于1的情况下跟踪逻辑
当C为1时,输出应设置为高
更正了Verilog(我这里只有Altera和Verilog):
以及来自正时分析仪的警告,表明其分析了两个组合
环作为闩锁。技术观点看起来似乎有道理,但你有一个
此编码样式存在问题,可能会导致问题
问题在于,您只显式地编写了反馈路径的代码,但是您还需要
让合成器推断闩锁。您的代码包括if(C='1')
,因此
当C不是1时,合成器推断内存行为-锁存器。但是,
是没有意义的,因为您还明确地告诉它闩锁的位置
您的反馈路径。不要两者都做;认为任何
合成器足够聪明,可以理解你们真正的意思。这里有一个
对您想要的内容毫无疑问的版本:
module top(
input wire S, R, C,
output wire Q, Qbar);
wire S2 = ~(C & S);
wire R2 = ~(C & R);
assign Q = ~(S2 & Qbar);
assign Qbar = ~(R2 & Q);
endmodule
相反,这会给出两个“发现2个节点的组合循环”警告,如下所示:
你会想到的。这也综合了Ok,RTL/技术视图看起来不错,
乍一看
标准免责声明:计时分析器不擅长使用
组合循环。如果你只是在玩,这一切可能都会起作用
但如果这是一个真正的设计,你需要认真考虑你的设计
约束,以及分析器是否实际跟踪了
反馈路径(可能没有)。你需要用sdf做一个定时sim卡
返回注释以确认其实际工作。首先,您的原理图实现不正确:R应该是
~S,S应该是~R。请尝试在S或R等于1的情况下跟踪逻辑
当C为1时,输出应设置为高
更正了Verilog(我这里只有Altera和Verilog):
以及来自正时分析仪的警告,表明其分析了两个组合
环作为闩锁。技术观点看起来似乎有道理,但你有一个
此编码样式存在问题,可能会导致问题
问题在于,您只显式地编写了反馈路径的代码,但是您还需要
让合成器推断闩锁。
entity sr_latch is
port (
s, r, c: in bit;
q, qbar: buffer bit);
end entity;
architecture sr_latch of sr_latch is
begin
q <= (s nand c) nand qbar;
qbar <= (r nand c) nand q;
end architecture