Почему код испытательного стенда для 4-битного мультиплексирования дает x?

Я не могу понять, почему это не работает. Я запустил симуляцию на edaplayground, и я получаю «x» на выходе каждый раз, когда выбор изменяется на 0. Однако я правильно получаю «1», когда sel равен «1».

Код:

 module mux8_2(input [3:0]a,[3:0]b,sel,output [3:0]out);   
 assign out=(sel)?a:b;  
 endmodule

и тестовый стенд:

 module mux8_2_tb; 

 reg [3:0]A;  

 reg [3:0]B;  

 reg SEL;  

 wire [3:0]OUT;  

 mux8_2 UUT(A,B,SEL,OUT);  

 initial  
  begin  

 $dumpfile("dump.vcd");  

 $dumpvars(1);  

 A=4'b1; B=4'b0; SEL=1'b1;

 #1 SEL=1'b0;  
 #1 SEL=1'b1;  
 #1 SEL=1'b0;  
 #1 SEL=1'b1;  
 #1 SEL=1'b0;  
 #1 SEL=1'b1;  
 #1;
 end

 endmodule

person Roman Andreevitch Biriukov    schedule 14.12.2016    source источник


Ответы (1)


Я не могу воспроизвести ваши результаты; сигнал OUT мне всегда известен.

Но я получаю предупреждение о компиляции:

The following 1-bit expression is connected to 4-bit port "sel" of module 
  "mux8_2", instance "UUT"

Это можно исправить:

module mux8_2(input [3:0]a,[3:0]b, input sel,output [3:0]out);   

В вашем коде sel унаследовал ширину от предыдущего сигнала ([3:0]b). Ваш код эквивалентен:

module mux8_2(input [3:0]a,[3:0]b,[3:0]sel,output [3:0]out);   

Добавление еще одного ключевого слова input перед sel заставляет его использовать ширину по умолчанию, равную 1 биту.

person toolic    schedule 14.12.2016