K
kalpana.aravind
Guest
Hi All,
taip verilog kodas uart.v
Kaip rašyti savikontrolės bandymų stendo, kad visiškai pratimai Verilog UART modulis.Prašau duoti man jo idėja.
Sukūrę bandymo stendo failą kaip bandymas UART modulis naudojant testbench.
Any suggestions welcome.
Thanks in advance.
//------------------------------------------------ -----
/ / Dizainas Vardas: UART
/ / Failo pavadinimas: uart.v
/ / Funkcija: Paprasta UART
//------------------------------------------------ -----
modulis UART (
naujo,
txclk,
ld_tx_data,
tx_data,
tx_enable,
tx_out,
tx_empty,
rxclk,
uld_rx_data,
rx_data,
rx_enable,
rx_in,
rx_empty
)
/ / Port deklaracijos
input Reset;
input txclk;
input ld_tx_data;
input [7:0] tx_data;
input tx_enable;
produkcija tx_out;
produkcija tx_empty;
input rxclk;
input uld_rx_data;
output [7:0] rx_data;
input rx_enable;
input rx_in;
produkcija rx_empty;
/ / Vidaus Kintamieji
reg [7:0] tx_reg;
reg tx_empty;
reg tx_over_run;
reg [3:0] tx_cnt;
reg tx_out;
reg [7:0] rx_reg;
reg [7:0] rx_data;
reg [3:0] rx_sample_cnt;
reg [3:0] rx_cnt;
reg rx_frame_err;
reg rx_over_run;
reg rx_empty;
reg rx_d1;
reg rx_d2;
reg rx_busy;
/ / UART RX logika
visada @ (posedge rxclk arba posedge reset)
if (Reset) prasideda
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;
end else begin
/ / Sinchronizacija ASYNCH signalas
rx_d1 <= rx_in;
rx_d2 <= rx_d1;
/ / Uload RX duomenų
if (uld_rx_data) prasideda
rx_data <= rx_reg;
rx_empty <= 1;
pabaiga
/ / Gauti duomenis tik tada, kai RX yra įjungtas
if (rx_enable) prasideda
/ / Tikrinama, jei tik gavo pradžios rėmelio
if (! rx_busy & &! rx_d2) prasideda
rx_busy <= 1;
rx_sample_cnt <= 1;
rx_cnt <= 0;
pabaiga
/ / Start of Frame aptikti, darykite su poilsio duomenų
if (rx_busy) prasideda
rx_sample_cnt <= rx_sample_cnt 1;
/ / Logika mėginį viduryje duomenų
if (rx_sample_cnt == 7) Pradžia
if ((rx_d2 == 1) & & (rx_cnt == 0)) prasideda
rx_busy <= 0;
end else begin
rx_cnt <= rx_cnt 1;
/ / Start saugojimo RX duomenų
if (rx_cnt> 0 & & rx_cnt <9) Pradžia
rx_reg [rx_cnt - 1] <= rx_d2;
pabaiga
if (rx_cnt == 9) Pradžia
rx_busy <= 0;
/ / Tikrinama ar pabaiga rėmo gavo teisingai
if (rx_d2 == 0) prasideda
rx_frame_err <= 1;
end else begin
rx_empty <= 0;
rx_frame_err <= 0;
/ / Tikrinama, jeigu paskutinis RX duomenys nebuvo iškrauti,
rx_over_run <= (rx_empty)?0: 1;
pabaiga
pabaiga
pabaiga
pabaiga
pabaiga
pabaiga
if (! rx_enable) prasideda
rx_busy <= 0;
pabaiga
pabaiga
/ / UART TX logika
visada @ (posedge txclk arba posedge reset)
if (Reset) prasideda
tx_reg <= 0;
tx_empty <= 1;
tx_over_run <= 0;
tx_out <= 1;
tx_cnt <= 0;
end else begin
if (ld_tx_data) prasideda
if (! tx_empty) prasideda
tx_over_run <= 0;
end else begin
tx_reg <= tx_data;
tx_empty <= 0;
pabaiga
pabaiga
if (tx_enable & &! tx_empty) prasideda
tx_cnt <= tx_cnt 1;
if (tx_cnt == 0) prasideda
tx_out <= 0;
pabaiga
if (tx_cnt> 0 & & tx_cnt <9) Pradžia
tx_out <= tx_reg [tx_cnt -1];
pabaiga
if (tx_cnt == 9) Pradžia
tx_out <= 1;
tx_cnt <= 0;
tx_empty <= 1;
pabaiga
pabaiga
if (! tx_enable) prasideda
tx_cnt <= 0;
pabaiga
pabaiga
endmodule
taip verilog kodas uart.v
Kaip rašyti savikontrolės bandymų stendo, kad visiškai pratimai Verilog UART modulis.Prašau duoti man jo idėja.
Sukūrę bandymo stendo failą kaip bandymas UART modulis naudojant testbench.
Any suggestions welcome.
Thanks in advance.
//------------------------------------------------ -----
/ / Dizainas Vardas: UART
/ / Failo pavadinimas: uart.v
/ / Funkcija: Paprasta UART
//------------------------------------------------ -----
modulis UART (
naujo,
txclk,
ld_tx_data,
tx_data,
tx_enable,
tx_out,
tx_empty,
rxclk,
uld_rx_data,
rx_data,
rx_enable,
rx_in,
rx_empty
)
/ / Port deklaracijos
input Reset;
input txclk;
input ld_tx_data;
input [7:0] tx_data;
input tx_enable;
produkcija tx_out;
produkcija tx_empty;
input rxclk;
input uld_rx_data;
output [7:0] rx_data;
input rx_enable;
input rx_in;
produkcija rx_empty;
/ / Vidaus Kintamieji
reg [7:0] tx_reg;
reg tx_empty;
reg tx_over_run;
reg [3:0] tx_cnt;
reg tx_out;
reg [7:0] rx_reg;
reg [7:0] rx_data;
reg [3:0] rx_sample_cnt;
reg [3:0] rx_cnt;
reg rx_frame_err;
reg rx_over_run;
reg rx_empty;
reg rx_d1;
reg rx_d2;
reg rx_busy;
/ / UART RX logika
visada @ (posedge rxclk arba posedge reset)
if (Reset) prasideda
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;
end else begin
/ / Sinchronizacija ASYNCH signalas
rx_d1 <= rx_in;
rx_d2 <= rx_d1;
/ / Uload RX duomenų
if (uld_rx_data) prasideda
rx_data <= rx_reg;
rx_empty <= 1;
pabaiga
/ / Gauti duomenis tik tada, kai RX yra įjungtas
if (rx_enable) prasideda
/ / Tikrinama, jei tik gavo pradžios rėmelio
if (! rx_busy & &! rx_d2) prasideda
rx_busy <= 1;
rx_sample_cnt <= 1;
rx_cnt <= 0;
pabaiga
/ / Start of Frame aptikti, darykite su poilsio duomenų
if (rx_busy) prasideda
rx_sample_cnt <= rx_sample_cnt 1;
/ / Logika mėginį viduryje duomenų
if (rx_sample_cnt == 7) Pradžia
if ((rx_d2 == 1) & & (rx_cnt == 0)) prasideda
rx_busy <= 0;
end else begin
rx_cnt <= rx_cnt 1;
/ / Start saugojimo RX duomenų
if (rx_cnt> 0 & & rx_cnt <9) Pradžia
rx_reg [rx_cnt - 1] <= rx_d2;
pabaiga
if (rx_cnt == 9) Pradžia
rx_busy <= 0;
/ / Tikrinama ar pabaiga rėmo gavo teisingai
if (rx_d2 == 0) prasideda
rx_frame_err <= 1;
end else begin
rx_empty <= 0;
rx_frame_err <= 0;
/ / Tikrinama, jeigu paskutinis RX duomenys nebuvo iškrauti,
rx_over_run <= (rx_empty)?0: 1;
pabaiga
pabaiga
pabaiga
pabaiga
pabaiga
pabaiga
if (! rx_enable) prasideda
rx_busy <= 0;
pabaiga
pabaiga
/ / UART TX logika
visada @ (posedge txclk arba posedge reset)
if (Reset) prasideda
tx_reg <= 0;
tx_empty <= 1;
tx_over_run <= 0;
tx_out <= 1;
tx_cnt <= 0;
end else begin
if (ld_tx_data) prasideda
if (! tx_empty) prasideda
tx_over_run <= 0;
end else begin
tx_reg <= tx_data;
tx_empty <= 0;
pabaiga
pabaiga
if (tx_enable & &! tx_empty) prasideda
tx_cnt <= tx_cnt 1;
if (tx_cnt == 0) prasideda
tx_out <= 0;
pabaiga
if (tx_cnt> 0 & & tx_cnt <9) Pradžia
tx_out <= tx_reg [tx_cnt -1];
pabaiga
if (tx_cnt == 9) Pradžia
tx_out <= 1;
tx_cnt <= 0;
tx_empty <= 1;
pabaiga
pabaiga
if (! tx_enable) prasideda
tx_cnt <= 0;
pabaiga
pabaiga
endmodule