Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программируемая логика: ПЛИС, ПАИС
Войти
Регистрация
Восстановить пароль
 
SubtRose
0 / 0 / 0
Регистрация: 07.06.2019
Сообщений: 1
1

Ошибки при написании тестбенча

07.06.2019, 14:34. Просмотров 106. Ответов 0
Метки нет (Все метки)

Здравствуйте. Знакомлюсь с языком описания Verilog по курсу Иосифа Каршенбойма. Застрял на примере с тестбенчем к таймеру в главе 8.
Код n-битного таймера(здесь вроде проблем нет):

Код
timescale 1ns/10ps
module timer #( parameter size=4) (data,load,clk,reset,Time,out);
  input[size-1:0] data;
  output[size-1:0] out;
  input clk,reset,load;
  output Time;
  
  reg[size-1:0] out;
  reg Time;
  
  always @(posedge clk or posedge reset)
  begin
    if(reset)
      out=0;
    else
      if(load&Time)
        out=data;
      else
        if(!Time)
          out=out-1;
        else
          out=out;
  end
  
  always @(posedge clk or posedge reset)
  begin
    if(reset)
      Time=1;
    else
      if(out[size-1:0]==0)
        Time=1;
      else
        Time=0;
  end
  
endmodule
Код его верхнего модуля в виде простого КА:
Код
module statmach (In, Out, clk, Reset);
  input clk,Reset;
  input[3:0] In;
  output[4:0] Out;
  
  reg[4:0] Out;
  reg[3:0] State, NextState;
  wire TmrReady;
  reg TmrLoad=1;
  reg[4:0] TmrDelay=5;
  
  parameter s0=0, s1=1, s2=2, s3=3;
  
  
  always @(posedge clk or posedge Reset)
  begin
    if(Reset)
      State=s0;
    else
      if(TmrReady)
        State=NextState;
  end
  
  
  always @(State)
  begin
    case(State)
      s0: NextState=s1;
      s1: NextState=s2;
      s2: NextState=s3;
      s3: NextState=s0;
    endcase
  end
  
  
  always @(State)
  begin
    case(State)
      s0: Out=5'b00011;
      s1: Out=5'b00110;
      s2: Out=5'b01100;
      s3: Out=5'b11000;
      default: Out=5'b11111;
    endcase
  end
  
  timer #(5) TIMER(.Out(), .clk(clk), .Reset(Reset), .Load(TmrLoad), .Data(TmrDelay), .Time(TmrReady));
  
endmodule
Прошу обратить внимание на разрядность входной(In) и выходной шин(Out). Скатывал прямо всё как в пособии, так и не понял зачем на выходе 5 битов, но да ладно.

И код тестбенча:
Код
`timescale 1ns/10ps
 `define EOF 32'hFFFF_FFFF
 `define NULL 0
 `define MAX_LINE_LENGTH 1000
 `define INPUT_FILE_NAME "vectors.pat"
 
 module TestStatmach;
   reg clk, Reset;
   reg In;
   reg[31:0] TmpValue;
   wire Out;
   statmach dut(In, Out, clk, Reset);
   
   initial
   begin  
     clk=0;
     #10 forever #10 clk=!clk;
   end
   
   initial
   begin
     Reset=0;
     #10 Reset=1;
     #30 Reset=0;
   end
   
   integer file;
   reg[31:0] c, r, dec, hex;
   reg[3:0] bin;
   real RealTime;
   reg[8*`MAX_LINE_LENGTH:0] line;
   
   initial
   begin
     $timeformat(-9, 3, "ns", 6);
     file=$fopen(`INPUT_FILE_NAME, "r");
     if((file!=`EOF)&(file!=0))
       $display("The input file was opened succesfully.");
     else
       begin
         $display("ERROR: unable to open the input file");
         $finish;
       end
       
     c=$fgetc(file);
     
     $display("time bin decimal hex");
     
     while(c!=`EOF)
     begin
       if(c=="/")
         r=$fgets(line,file);
       else
         begin
           r=$ungetc(c, file);
           r=$fscanf(file, "f:\n", RealTime);
           
           if($realtime>RealTime)
             $display("Error - absolute time in file is out of order - %t", RealTime);
           else
             #(RealTime-$realtime)
             r=$fscanf(file, "%b %d %h\n", bin, dec, hex);
           
           in=bin[0];
           
         end
         
         c=$fgetc(file);
         
    end
    
    $fclose(file);
    
    $stop;
   end 
   
   always @(bin or dec or hex)
     $display("%t %b %d %h", $realtime, bin, dec, hex);
     
endmodule
Паттерн данных для теста опущу, т.к. он не имеет отношение к проблеме. Собственно, сама проблема заключается в "подключении" DUT к тестбенчу. Как видно statmach получает на вход один бит и столько выдает, хотя разрядность входа и выхода модуля - 4 бита и 5 бит соответственно. Сначала погрешил на опечатку и хотел поставить соответствующие размеры в тестбенче, но далее идет строка
In=bin[0];
, которая прямо указывает на что изначальная разрядность в тестбенче указана правильно. К слову, в описании к тесту тоже сказано, что с файла паттернов имеет смысл счёта только одного из разрядов.
Надеюсь, проблема понятна.
Прошу прощения за кривую вставку кода.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2019, 14:34
Ответы с готовыми решениями:

Ошибки при написании программы
1. JA @2 {Если >='A', то на метку @2} SOB AH,32 {Значит английская строчная - вычитаем из...

Ошибки при написании проекта.
Я новичок в программировании на ASP. NET. Напишите, пожалуйста, какие ошибки возникают чаще всего в...

Ошибки при написании консольного приложения
Всем привет! Помогите пожалуйста разобраться в чем дело, не запускается программа; Все облазил...

Ошибки при написании программы Avr Studio
Здравствуйте коллеги, написал программу, которая реализует огонь на ассемблере. В программировании...

Code::Blocks 12.11 - ошибки при написании Hello, World
Ребят вчера поставила Code::Blocks, всё норм создаю проект win 32, добавляю новый файл с++, и при...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2019, 14:34

Ошибки при написании кода переноса текста в закладки Microsoft Word 2010
Всем привет. Использую VB.Net 2008 / .Net Framework 3.5 . Возникла проблема с переносом данных из...

Ошибки в написании кода
Доброго времени суток! Нужно было написать подобие школьного журнала, но у меня возникли три...

Ошибки в написании админки
Подскажите пожалуйста как написать часть кода к админке. Мне нужно чтобы было текстовое поле в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru