Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: verilog
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
TurkinDV
Всем привет! Друзья,подскажите новичку ,пожалуйста, у меня на входе два операнда, как их описать ,чтобы их разрядность была параметризуема? verilog
pav2051
Для задания разрядности входных портов модуля можно поступить следующим образом:
Код
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));
TurkinDV
Цитата(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));

спасибо большое,помог ,слушай у меня это АЛУ ,нужно написать тестовые программы ,можешь обьяснить как это делать??
pav2051
Ну для начала нужно определиться что нужно подавать на входы блока АЛУ для того, чтобы проверить полностью функциональность модуля и какой ожидаем результат на выходе. Я бы выписал по пунктам операции, которые нужно проверить и для каждой подумать какие возможны случаи исхода этой операции. Например, первым делом хотим протестировать операцию сложения 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


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

Для начала, у нас тут "тыкать" не принято...
А что, со скайпом у Вас проблемы?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.