Verilog inout 的问题
大话FPGA描述:
双向信号
首先说明一件基本知识,在FPGA 设计中,只有在输入输出上可以使用双向信号,双向信号是不能使用在内部逻辑上的。一定不要用这种信号,否则工具会综合出一个你都不知道会是什么东西的东西。
针对一个双向端口,你需要把它变成一个输入信号 in,一个输出信号:out, 和一个输出使能信号: output_enable. 所以代码其实很简单:
Assign birsignal = output_enable ? out: 1’bz;
Assign in = birsignal、
这里有一个小小的提示,在写代码的时候突然不太清楚语法怎么写的时候,你可以在quartus 里面按一下右键,你可以发现一个insert template…的选择。试试看吧。
我写的程序:
Test.v
module Test
(
input clk, //clk input
output reg oe, //output enable
output reg [3:0] cnt, //counter
inout [1:0] data, //input and output data
input [1:0] data_in, //data for input
output [1:0] data_out, //data for output
output reg [1:0] dout //output bench
);
always@(posedge clk)//counter
begin
cnt<=cnt+1'b1;
if(cnt==7)
oe<=~oe;
end
assign data = oe ? data_in : 2'bzz;
assign data_out= data;
reg [1:0] counter;
always@(posedge clk)
begin
case(counter)
0:
begin
counter<=1;
dout<=2'bzz;
end
1:
begin
counter<=2;
dout<=2'bzz;
end
2:
begin
counter<=3;
dout<=2'b11;
end
3:
begin
counter<=0;
dout<=2'b00;
end
endcase
end
endmodule
仿真波形
感想
铭记,当遇到inout双向数据的时候,要把它分成2部分,
assign data = oe ? data_in : 2'bzz;
assign data_out= data;
这样即简化了问题,也不容易出错
posted on 2010-05-14 12:13 CrazyBingo 阅读(5113) 评论(2) 编辑 收藏 举报