Verilog基本电路问题

时间:2018-11-27 19:04:44

标签: verilog hdl quartus

我正在尝试使用Quartus Prime作为教授的附带项目在Verilog中编写基本电路。就是说,我在Verilog语法上遇到了麻烦。我要制作的电路是“与”门或“或”门的集合,从理论上确定电动发动机是否要打开。如果出现以下情况,则引擎将打开:a)踩脚,b)钥匙在车上,c)电池电量充足。如果a)电池上有电量,并且b)钥匙插入了秘密插槽,则引擎也会打开。对于汽车设计而言,这是不现实的,但它可以达到我的目的。首先,我的真值表:

The Engine Truth Table

现在,我的代码:

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正确设置?如何实施测试?

谢谢!

1 个答案:

答案 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.