реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> verilog, verilog
TurkinDV
сообщение Sep 30 2015, 13:18
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 30-09-15
Пользователь №: 88 634



Всем привет! Друзья,подскажите новичку ,пожалуйста, у меня на входе два операнда, как их описать ,чтобы их разрядность была параметризуема? verilog

Сообщение отредактировал TurkinDV - Sep 30 2015, 13:19
Go to the top of the page
 
+Quote Post
pav2051
сообщение Oct 1 2015, 12:21
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 6-04-15
Из: г. Новосибирск
Пользователь №: 86 081



Для задания разрядности входных портов модуля можно поступить следующим образом:
Код
module my_module(in1, in2, out);
parameter PAR_IN1 = 8;    // Описываем параметры и задаем значения по умолчанию
parameter PAR_IN2 = 8;
input [PAR_IN1-1:0] in1;    // Описываем входные порты и указываем их разрядность
input [PAR_IN2-1:0] in2;
...
endmodule

Теперь при создании инстанса этого модуля можно переопределить заданные по умолчанию значения (переопределяемые параметры и их значения указываются в скобках после символа #):
Код
my_module #(.PAR_IN1(4), .PAR_IN2(12)) inst0(.in1(in1), .in2(in2), .out(out));


Сообщение отредактировал pav2051 - Oct 1 2015, 12:23
Go to the top of the page
 
+Quote Post
TurkinDV
сообщение Oct 1 2015, 13:21
Сообщение #3





Группа: Участник
Сообщений: 9
Регистрация: 30-09-15
Пользователь №: 88 634



Цитата(pav2051 @ Oct 1 2015, 13:21) *
Для задания разрядности входных портов модуля можно поступить следующим образом:
Код
module my_module(in1, in2, out);
parameter PAR_IN1 = 8;    // Описываем параметры и задаем значения по умолчанию
parameter PAR_IN2 = 8;
input [PAR_IN1-1:0] in1;    // Описываем входные порты и указываем их разрядность
input [PAR_IN2-1:0] in2;
...
endmodule

Теперь при создании инстанса этого модуля можно переопределить заданные по умолчанию значения (переопределяемые параметры и их значения указываются в скобках после символа #):
Код
my_module #(.PAR_IN1(4), .PAR_IN2(12)) inst0(.in1(in1), .in2(in2), .out(out));

спасибо большое,помог ,слушай у меня это АЛУ ,нужно написать тестовые программы ,можешь обьяснить как это делать??
Go to the top of the page
 
+Quote Post
pav2051
сообщение Oct 1 2015, 17:57
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 6-04-15
Из: г. Новосибирск
Пользователь №: 86 081



Ну для начала нужно определиться что нужно подавать на входы блока АЛУ для того, чтобы проверить полностью функциональность модуля и какой ожидаем результат на выходе. Я бы выписал по пунктам операции, которые нужно проверить и для каждой подумать какие возможны случаи исхода этой операции. Например, первым делом хотим протестировать операцию сложения 2 чисел со знаком, нужно проверить случаи когда оба операнда положительные, когда тот или другой отрицательны и когда оба операнда отрицательны + нужно смоделировать ситуацию с переполнением и убедиться что флаг переполнения устанавливается, и так для каждой операции. Собственно эти шаги и реализовываете на verilog, подаете на вход известные воздействия и сравниваете выходной отклик с ожидаемым. Необходимо создать так называемый тестбенч - модуль для тестирования того или иного функционального блока, там делаете инстанс модуля АЛУ и задаете на него воздействия. Как-то так:
Код
`timescale 1ns/100ps      // Задаем величину временного шага и его точность
module tb_alu;
reg [7:0] in1;                 // Объявляем необходимые сигналы
reg [7:0] in2;
reg [1:0] op;
wire [7:0] out;
wire ovl;                  
reg clk;
initial begin         // Блок initial исполняется единожды
    // sum
    clk = 0;
    in1 = 8'h0A;   // Задаем операнды на входе
    in2 = 8'hF9;
    op = 2'b00;    // Задаем код операции
#10                   // Ждемс необходимое время, когда на выходе должны появиться данные (пусть будет 10 нс)
    if ((out == 8'h03) && (ovl == 1'b1)) begin     // Сравниваем выходные сигналы с ожидаемыми значениями
        $display("Test ok");                                 // И выводим на экран результат выполнения тестов
    end
    else begin
        $display("Test fail");
    end

    ...                        // Тестируем дальше что нужно
        $finish;                                    
end

always
    #0.5 clk = ~clk;      // Генерируем тактовый сигнал с периодом 1 нс

alu i0(.clk(clk), .in1(in1), .in2(in2), .op(op), .ovl(ovl), .out(out));
endmodule


Ну и стандарт верилога в помощь + море книг в инете по верилогу, удачи )

Сообщение отредактировал pav2051 - Oct 1 2015, 18:01
Go to the top of the page
 
+Quote Post
iosifk
сообщение Oct 1 2015, 19:07
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(TurkinDV @ Oct 1 2015, 16:21) *
спасибо большое,помог ,слушай у меня это АЛУ ,нужно написать тестовые программы ,можешь обьяснить как это делать??

Для начала, у нас тут "тыкать" не принято...
А что, со скайпом у Вас проблемы?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 16:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01396 секунд с 7
ELECTRONIX ©2004-2016