Основные вопросы Verilog Circuit - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь написать базовую схему в Verilog, используя Quartus Prime в качестве побочного проекта для профессора.Тем не менее, у меня проблемы с синтаксисом Verilog.Схема, которую я хочу создать, представляет собой набор вентилей И и ИЛИ, которые теоретически определяют, должен ли включаться электрический двигатель.Двигатель включится, если есть: а) нога на обрыве, б) ключ находится в машине, и в) аккумулятор достаточно заряжен.Двигатель также включится, если на аккумуляторе одновременно находятся: а) и б) ключ вставлен в секретный слот.Нереально для автомобильного дизайна, но он служит моим целям.Во-первых, моя таблица истинности:

Таблица истинности двигателя

А теперь мой код:

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 голосов
/ 29 ноября 2018

Перво-наперво, возможно, имеет смысл включить тактовый сигнал.Если вы не хотите задействовать свою логику на этапе сброса (что вы можете сделать, но вряд ли).

Что касается проблем в коде, вы никогда не определяете сброс, вы используете '==' для назначениязначение должно быть '<=', и вы пропускаете много точек с запятой. </p>

Уже поздно, поэтому это редактирование, скорее всего, не сработает, но оно должно дать вам несколько указателей.

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