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

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

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

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

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
Код его верхнего модуля в виде простого КА:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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 битов, но да ладно.

И код тестбенча:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
`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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.06.2019, 14:34
Ответы с готовыми решениями:

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

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

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.06.2019, 14:34
Помогаю со студенческими работами здесь

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

Подскажите в чем ошибки при написании программы
Дано задание: Протабулировать функцию Y на заданном отрезке и записать в одномерный массив А значения функции меньше введенного числа...

Исправить ошибки, допущенные при написании класса
C# Зачет по программированию! 1. Имеется класс, его объекты должны позволять работать с личными данными человека: фамилия, имя, дата...

Типичные ошибки при написании Лисп-кода
Здравствуйте! Скажите пожалуйста, какие вы можете назвать типичные ошибки при написании кода на Лиспе? Чего следует избегать в первую...

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


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной. Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
Формулы поворота
Igor3D 10.03.2025
Добрый день Тема Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости". x' = x * cos(a) - y * sin(a) y' = y * cos(a) + x * sin(a) Как бы Вы их. . .
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view. string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет! Отправлено 19 февраля 2025 года в 17:20:21 UTC Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home. Мы официально. . .
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru