2016-04-03 2 views
0

В приведенном ниже коде Verilog для Flip Flop J-K, я хочу инициализировать тип провода q и q_bar с некоторым значением. Например, я инициализирую здесь q и q_bar с 0. Но на выходе q и q_bar не имеют значения (1'hx). Итак, как инициализировать тип провода с константой?Как инициализировать провод с константой в verilog?

module JK_FF(j,k,clk,q,q_bar) ; 
input j,k,clk ; 
output q , q_bar ; 
wire s,r,w,z ; 

assign w = q ; 
assign z = q_bar ; 

nand U1(s,j,clk,z) ; 
nand U2(r,k,clk,w) ; 
nand U3(q,s,z) ; 
nand U4(q_bar,r,w) ; 

endmodule 

/* TEST BENCH */ 

module JK_FF_TB ; 

reg j,k,clk ; 
wire q , q_bar ; 

assign q = 1'b0 ; 
assign q_bar = 1'b0 ; 

initial begin 
clk = 1'b1 ; 
end 

JK_FF DUT(j,k,clk,q,q_bar) ; 

initial 
begin 
j = 1'b0 ; 
k = 1'b0 ; 

#5 

    j = 1'b0 ; 
    k = 1'b1 ; 

    #5 

    j = 1'b1 ; 
    k = 1'b0 ; 

    #5 

    j = 1'b1 ; 
    k = 1'b1 ; 

    end 
    endmodule 
+0

Все, что вам нужно, это ** ** сброса значения '' q' и q_bar'. Добавьте логику сброса. Кроме того, метод использования блока 'always' для создания флопов обычно используется в Verilog. – sharvil111

+0

Можете ли вы уточнить? Я наивна в verilog! Плюс q и q_bar имеет тип проводника, поэтому я думаю, что мы не можем установить их внутри всегда. исправьте меня, если я ошибаюсь –

+0

Да. Вы должны иметь q и qbar как reg. Вы можете посмотреть [эту ссылку] (http://verilogbynaresh.blogspot.in/2013/07/design-of-jk-flip-flop-using-behavior.html?m=1), чтобы всегда блокировать флоп. – sharvil111

ответ

1

Есть несколько вопросов, которые необходимо адресовать.

Состояние в Verilog, как и значение триггера, обычно хранится в reg, где значение может быть инициализировано с использованием initial. Однако в простом триггере из ворот есть только провода, которые не могут быть инициализированы.

Конструкция со скрещенными воротами NAND в аппаратной реализации приведет к стабильному значению при запуске, даже если провода изначально не определены 1'bX. Вы можете эмулировать в схеме с использованием преобразования из 1'X в 1'b0 или 1'b1 в q и q_bar использовании назначить в качестве:

assign w = q !== 1'b0; // 1'bX => 1 
assign z = q_bar === 1'b1; // 1'bX => 0 

Реализация Verilog будет, однако, дают условия гонки, так как тактовый импульс всегда будет слишком долго немедленное изменение, которое возникает при моделировании этого проекта. Обычно это проявляется как бесконечная итерация во время моделирования, тем самым достигая пределов итерации с полученной ошибкой.

Так больше модификаций требуется, и вы можете найти большой учебник здесь: The JK Flip Flop

+0

Здесь q = 1'b0; и q! == 1'b0 вернет 1 в w! Я прав ? –

+0

Если 'q = 1'b0', то' q! == 1'b0 = 1'b0! == 1'b0 =! (1'b0 === 1'b0) =! 1 = 0', поэтому это вернет '0' в' w', а не '1', как вы предлагаете. –

Смежные вопросы