CrazyBingo

Verilog inout 的问题

0
阅读(3218)

大话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;

这样即简化了问题,也不容易出错