Verilog - Как вставить значения из выходного регистра в модуль тестовой среды?

Таким образом, нам предоставили последовательный модуль в Verilog и поставили задачу создать тестовую среду, чтобы показать разницу между неблокирующими и блокирующими назначениями.

Предоставленный код:

module sequential_module (A, B, C, D, clk);
input clk;

output A, B, C, D;
reg A, B, C, D;

always @(posedge clk)
begin
   A = B;
   B = A;
end

always @(posedge clk)
begin
   C <= D;
   D <= C;
end

endmodule

Кажется, я не могу подключить какие-либо значения к какой-либо из переменных (A, B, C, D) в тестовой среде, потому что я получаю недопустимый вывод или ошибку подключения порта inout.

Тестовый стенд, который мне удалось создать:

module testbench_sequential;
reg clk;
wire A, B, C, D;

sequential_module test(A, B, C, D, clk);
always
   #5 clk = ~clk;
 
initial
   begin
      clk = 1'b0; 
      $display ("Simulating output for Activity 3a");
      $monitor ($time,,, "clk = %b A = %b B = %b C = %b D = %b ", clk, A, B, C, D);      
      #25 $finish;
   end

endmodule

Единственный вывод, который я получаю от тестового стенда, приведенного выше, - это то, что часы, кажется, работают, но у других переменных есть значения Don't care (1'bx). Я как бы новичок в использовании этого приложения, и любая помощь будет принята с благодарностью.


person Beans    schedule 03.07.2020    source источник


Ответы (1)


  1. Вы определили все свои сигналы (A-D) как выходы.
  2. В ваших заданиях, например, A = B (должно быть <=), все регистры фактически не имеют значения. Вы их не инициализировали. Таким образом, в вашем тестовом стенде они отображаются как 1'bx.

Чтобы добиться желаемого, вы можете просто изменить объявление своих регистров, например:

reg A = 1'b0, B = 1'b1, C = 1'b0, D = 1'b1;

Результат:

Моделирование выходных данных для действия 3a

0 clk = 0 A = 0 B = 1 C = 0 D = 1

5 clk = 1 A = 1 B = 1 C = 1 D = 0

10 clk = 0 A = 1 B = 1 C = 1 D = 0

15 clk = 1 A = 1 B = 1 C = 0 D = 1

20 clk = 0 A = 1 B = 1 C = 0 D = 1

person Qiu    schedule 03.07.2020
comment
это может быть невозможно синтезировать. - person Serge; 03.07.2020
comment
это может работать только для моделирования, я не совсем уверен, есть ли ПЛИС, которая может инициализировать регистр со значением, отличным от 0. - person m4j0rt0m; 07.07.2020