[笔记].一种双向口的Verilog写法.[Verilog]
0赞
发表于 2010/6/9 12:38:11
阅读(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 |
module bidir ( |
02 |
input i_clk, |
03 |
input io_en, // 0 input; 1 output |
04 |
inout [1:0] io_dat, |
05 |
input [1:0] i_dat, |
06 |
output reg [1:0] o_dat |
07 |
); |
08 |
09 |
reg [1:0] i_dat_r; |
10 |
11 |
assign io_dat = (!io_en) ? i_dat_r : 2'bz ; |
12 |
13 |
always @( posedge i_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期