安德鲁

[笔记].一种双向口的Verilog写法.[Verilog]

0
阅读(2797)

基本思路


图1 双向口的基本框图

如图1,当io_en为0时,三态门被打开,数据从i_dat输入到io_dat;当io_en为1时,三态门被关闭,数据从io_dat输出到 o_dat,i_dat与io_dat之间为高阻态,无法建立通路。即io_en=0,io_dat做输出口;io_en=1,io_dat做输入口。

源代码


01 modulebidir (
02 inputi_clk,
03 inputio_en,// 0 input; 1 output
04 inout[1:0] io_dat,
05 input[1:0] i_dat,
06 outputreg[1:0] o_dat
07 );
08
09 reg[1:0] i_dat_r;
10
11 assignio_dat = (!io_en) ? i_dat_r :2'bz;
12
13 always@(posedgei_clk)
14 begin
15 if(!io_en)
16 i_dat_r <= i_dat;
17 else
18 o_dat <= io_dat;
19 end
20
21 endmodule

在ff中转换数据,故相应的输出都会延迟一个clock。


图2 QII综合的RTL

仿真波形

输出口仿真


图3 输出口波形

输入口仿真


图4 输出口波形

参考

1. 莫海永, 张申科.FPGA中双向端口I/O的研究.国外电子测量技术.2005年第6期

Baidu
map