我正在尝试使用Quartus Prime作为教授的附带项目在Verilog中编写基本电路。就是说,我在Verilog语法上遇到了麻烦。我要制作的电路是“与”门或“或”门的集合,从理论上确定电动发动机是否要打开。如果出现以下情况,则引擎将打开:a)踩脚,b)钥匙在车上,c)电池电量充足。如果a)电池上有电量,并且b)钥匙插入了秘密插槽,则引擎也会打开。对于汽车设计而言,这是不现实的,但它可以达到我的目的。首先,我的真值表:
现在,我的代码:
module ignition (
key,
foot,
batt,
secr,
powr,
);
//--INPUTS/OUTPUTS--
input key, foot, batt, secr;
output powr;
//--DATATYPE--
reg key, foot, batt, secr, powr
//--LOGIC--
always @ (posedge reset)
always begin
if (key == 1) && (foot == 1) && (batt == 1)
powr == 1;
else if (secr == 1) && (batt == 1)
powr == 1;
else
powr == 0
end
//--TESTBLOCK--
module ignition_tb;
reg key, foot, batt, secr, powr
initial begin
$monitor ("key=%b,foot=%b,batt=%b,secr=%b,powr=%b")
key = 0
foot = 0
batt = 0
secr = 0
powr = 0
我不太确定从这里到哪里。我的代码是否针对Verilog正确设置?如何实施测试?
谢谢!
答案 0 :(得分:0)
首先,包括时钟信号可能很有意义。除非您想在重置的姿势上触发逻辑(您可以这样做,但不太可能)。
对于代码中的问题,您永远不会定义重置,使用'=='来分配值应该是'<=',并且缺少很多分号。
已经晚了,因此此编辑可能无法正常工作,但应该为您提供一些指示。
module ignition (
key,
foot,
batt,
secr,
powr,
clk //clock input
);
//--INPUTS/OUTPUTS--
input key, foot, batt, secr;
output powr;
//--DATATYPE--
reg key, foot, batt, secr, powr;
//--LOGIC--
always @ (posedge clk) //assuming you want to use clock, else switch to whatever you want
if (key == 1) && (foot == 1) && (batt == 1)
powr <= 1;
else if (secr == 1) && (batt == 1)
powr <= 1;
else
powr <= 0;
end
//--TESTBLOCK--
module ignition_tb;
reg key, foot, batt, secr, powr, clk;
always @* begin
#5 clk <= ~clk;
end
initial begin
$monitor ("key=%b,foot=%b,batt=%b,secr=%b,powr=%b");
key <= 0;
foot <= 0;
batt <= 0;
secr <= 0;
powr <= 0;
//add some new values after a delay (#5) to test if it works.