Помощ нужда - Писане testbench в Verilog

K

kalpana.aravind

Guest
Здравейте всички,

следните е Verilog код за uart.v
Как да напишем самостоятелно пейка проверка на тест, който напълно упражнява Verilog UART модул.Моля, дайте ми някаква представа за него.
След създаването на стенд файл как да тествате UART модул използва testbench.
Всички предложения добре дошли.

Благодаря предварително.

//------------------------------------------------ -----
/ / Дизайн Име: UART
/ / Име на файла: uart.v
/ / Функция: Обикновено UART

//------------------------------------------------ -----
модул UART (
нулиране,
txclk,
ld_tx_data,
tx_data,
tx_enable,
tx_out,
tx_empty,
rxclk,
uld_rx_data,
rx_data,
rx_enable,
rx_in,
rx_empty
);
/ / Порт декларации
вход Reset;
вход txclk;
вход ld_tx_data;
вход [7:0] tx_data;
вход tx_enable;
tx_out продукция;
tx_empty продукция;
вход rxclk;
вход uld_rx_data;
продукция [7:0] rx_data;
вход rx_enable;
вход rx_in;
rx_empty продукция;

/ / Вътрешните променливи
обл [7:0] tx_reg;
обл tx_empty;
обл tx_over_run;
обл [3:0] tx_cnt;
обл tx_out;
обл [7:0] rx_reg;
обл [7:0] rx_data;
обл [3:0] rx_sample_cnt;
обл [3:0] rx_cnt;
обл rx_frame_err;
обл rx_over_run;
обл rx_empty;
обл rx_d1;
обл rx_d2;
обл rx_busy;

/ / UART RX Logic
Винаги @ (posedge rxclk или проучване posedge)
ако (Reset) започва
rx_reg <= 0;
rx_data <= 0;
rx_sample_cnt <= 0;
rx_cnt <= 0;
rx_frame_err <= 0;
rx_over_run <= 0;
rx_empty <= 1;
rx_d1 <= 1;
rx_d2 <= 1;
rx_busy <= 0;
края иначе започва
/ / Синхронизирайте ASYNCH сигнал
rx_d1 <= rx_in;
rx_d2 <= rx_d1;
/ / Uload на RX данни
IF (uld_rx_data) започва
rx_data <= rx_reg;
rx_empty <= 1;
приключвам
/ / Получаване на данни, само когато е активиран RX
IF (rx_enable) започва
/ / Проверка дали просто получи проекта на рамката
ако (! rx_busy & &! rx_d2) започва
rx_busy <= 1;
rx_sample_cnt <= 1;
rx_cnt <= 0;
приключвам
/ / Начало на рамката открити, продължете с останалата част на данни
IF (rx_busy) започва
rx_sample_cnt <= rx_sample_cnt 1;
/ / Логика да се вземе проба в средата на данни
IF (rx_sample_cnt == 7) започва
ако ((rx_d2 == 1) & & (rx_cnt == 0)) започва
rx_busy <= 0;
края иначе започва
rx_cnt <= rx_cnt 1;
/ / Start RX съхранение на данни
IF (rx_cnt> 0 & & rx_cnt <9) започва
rx_reg [rx_cnt - 1] <= rx_d2;
приключвам
IF (rx_cnt == 9) започва
rx_busy <= 0;
/ / Проверка дали Край на рамката получени правилно
IF (rx_d2 == 0) започва
rx_frame_err <= 1;
края иначе започва
rx_empty <= 0;
rx_frame_err <= 0;
/ / Проверка дали последни данни RX не е разтоварени,
rx_over_run <= (rx_empty)?0: 1;
приключвам
приключвам
приключвам
приключвам
приключвам
приключвам
ако (! rx_enable) започва
rx_busy <= 0;
приключвам
приключвам

/ / UART TX Logic
Винаги @ (posedge txclk или проучване posedge)
ако (Reset) започва
tx_reg <= 0;
tx_empty <= 1;
tx_over_run <= 0;
tx_out <= 1;
tx_cnt <= 0;
края иначе започва
IF (ld_tx_data) започва
ако (! tx_empty) започва
tx_over_run <= 0;
края иначе започва
tx_reg <= tx_data;
tx_empty <= 0;
приключвам
приключвам
IF (tx_enable & &! tx_empty) започва
tx_cnt <= tx_cnt 1;
IF (tx_cnt == 0) започва
tx_out <= 0;
приключвам
IF (tx_cnt> 0 & & tx_cnt <9) започва
tx_out <= tx_reg [tx_cnt -1];
приключвам
IF (tx_cnt == 9) започва
tx_out <= 1;
tx_cnt <= 0;
tx_empty <= 1;
приключвам
приключвам
ако (! tx_enable) започва
tx_cnt <= 0;
приключвам
приключвам

endmodule

 
Аз нямам време да гледам на това в подробности в момента, но тук са няколко общи предложения:
Използвайте "код" маркер, за да си Verilog кода е форматиран правилно и е по-лесно да чета.
В допълнение, приложете си. V файла на вашия пост, така че хората могат лесно да го изтеглите и го стартирате.
Тези неща правят по-лесно за хората да помогнат на

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Усмивка" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top