2015-11-20 2 views
0

У меня есть пример кода о T-Bird Tail Lights, и он передает состояния следующему модулю. Я изменил код, который не должны передавать состояние, но, кажется, выход не меняется (остается 000 все время)Модуль неправильно создан?

Вот мой модифицированный код:

module TBird(E,B,L,R,int_clk,L_Light,R_Light); 
input E,B,L,R,int_clk; 
output [2:0] L_Light; 
output [0:2] R_Light; 
reg [19:0] C; 
wire int_clk; 

One_Side U1 (E,B,R,int_clk,R_Light); 
One_Side U2 (E,B,L,int_clk,L_Light); 
endmodule 

module One_Side(e,b,t,clk,light_eb); 
input e,b,t,clk; 
output reg [2:0] light_eb=3'b000; 
always @(posedge clk or e or b or t) 
    begin 
     case ({e,b,t}) 
     3'b000: light_eb=3'b000; 
     3'b0?1: begin 
        if (light_eb==3'b000) begin 
         light_eb=3'b001; 
        end else if (light_eb==3'b001) begin 
         light_eb=3'b011; 
        end else if(light_eb==3'b011) begin 
         light_eb=3'b111; 
        end else begin 
         light_eb=3'b000; 
        end 
       end 
     3'b?10: light_eb=3'b111; 
     3'b10?: begin 
        if (light_eb!==(3'b000|3'b111)) begin 
         light_eb=3'b000; 
        end 
        light_eb=~light_eb; 
       end 
     3'b111: begin 
        if (light_eb==3'b000) begin 
         light_eb=3'b001; 
        end else if (light_eb==3'b001) begin 
         light_eb=3'b011; 
        end else if(light_eb==3'b011) begin 
         light_eb=3'b111; 
        end else begin 
         light_eb=3'b000; 
        end 
       end 
     endcase 
    end 
endmodule 

У меня были некоторые опыт работы на Java, но я мало знаю о verilog, поэтому я даже не знаю, где идет не так (в Java, eclipse есть точки останова и отладчик и тому подобное), любые предложения/рекомендации оценены.

+0

'always @ (posedge clk или e or b or t)' должно быть 'always @ (posedge clk)' для синхронной логики. или 'always @ *' для комбинационной логики. Выбери один. – Greg

ответ

1

Пара ошибок в тестовом стенде и дизайне. Перечислено следующим образом:

У вас есть не предусмотрено переключение на тактовый сигнал. Таким образом, не будет обнаружено posedge обнаруженных часов. Есть много способов для создания часов, один из них заключается в следующем:

always #5 clk = ~clk; 

Используя reset сигнал в дизайне является хорошей практикой. Применить сбросить от testbench, чтобы установить все i внутренние регистры в дизайне к их начальные значения.

Наиболее важно вещь у вас есть не предусмотрен какой-либо входной стимул к дизайну. Любые случайный стимул должен применяться для получения результата. Вы должны предоставить некоторые входные данные для получения вывода, отныне ваш вывод x.

initial 
begin 
forever 
begin 
    #6; 
    E = $random; 
    B = $random; 
    R = $random; // and so on... 
end 
end 

Использование неблокирующих (< =) задания в дизайне является хорошей практикой кодирования. Кроме того, блокировка донтов (=) и неблокирование (< =) присвоений.

a = b; // never use this in sequential circuit. 
a<= b; // use this in sequential circuit. 

Я сделал несколько действительный для вашего испытательного стенда дизайна, посмотри на EDAPlayground ссылки.

должны относиться к this, this и this ссылки для понимания общего TestBench архитектуры.

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