verilog inout端口

1.总线和总线操作

总线是运算部件之间数据流通的公共通道。在硬线逻辑构成的运算电路中只要电路的规模允许,我们可以比较自由地来确定总线的位宽,因此可以大大提高数据流通的速度。适当的总线的位宽,配合适当并行度的运算逻辑和步骤能显著地提高专用信号处理逻辑电路的运算能力。各运算部件和数据寄存器组可以通过带控制端的三态门与总线的连接。通过对控制端电平的控制来确定在某一时间片段内,总线归哪两个或哪几个部件使用(任何时间片段只能有一个部件发送,但可以有几个接收)。用Verilog 来描述总线和总线操作是非常简单的。下面就是一个简单的与总线有接口的模块是如何对总线进行操作的例子:

module SampleOfBus(DataBus, link_bus,write);
    inout [11:0] DataBus;                     // 总线双向端口
    input link_bus;                           // 向总线输出数据的控制电平
    reg [11:0] outsigs;
    assign DataBus = (link_bus) ? outsigs : 12 ‘h zzz ;

    //当link_bus 为高电平时通过总线把存在outsigs 的计算结果输出
    always @(posedge write)                   //每当write 信号上跳沿时
        begin                                 //接收总线上数据并乘以五
            outsigs <= DataBus * 5;           //把计算结果存入outsigs
        end
endmodule

通过以上例子我们可以理解使这个总线连接模块能正常工作的最重要的因素是与其他模块的配合,如:何时提供write 信号?此时DataBus 上数据是否已正确提供?何时提供link_bus 电平?输出的数据是否能被有效地利用?控制信号的相互配合由同步状态机控制的开关阵列控制。

2.DSP与FPGA通讯时,外部数据总线设置

DSP通过EMIF与FPGA通讯,详细内容见另一篇博客。

C6455的EMIFA提供了64bits宽的外部数据总线接口与FPGA通讯。要实现双向通讯的话,可以如下设置:

inout[63:0] data_inout;//64位数据总线接口,将其声明为inout端口,作为输入/输出端口
/******/双向端口,三态门
wire [63:0] outsigs;
assign data_inout = (!dsp_send_sig) ? outsigs : 64'hzzz ;

DSP控制信号dsp_send_sig为高电平或者低电平。dsp_send_sig为高电平,data_inout作为输入端口,DSP向FPGA发送数据;dsp_send_sig为低电平,data_inout作为输出端口,DSP从FPGA读数据,即数据outsigs。

3.inout端口如何仿真?

要区别inout端口与input端口和output端口。在仿真文件中,input端口定义为reg类型,需要对其进行赋值;output定义为wire类型,测试文件中不需要对其进行操作,直接在modelsim的wave中查看其结果;而inout端口定义为wire类型,但是需要添加assign语句,如上例中,

/*******/仿真文件
//Bidirs
wire [63:0] data_inout;

wire [63:0] insigs;
assign data_inout = (!sig) ? insigs: 64'hzzz ;

仿真文件中控制使能信号sig,其控制过程与顶层模块中的控制过程相反。sig为低电平,data_inout为输入端口,接收数据insigs,作为顶层模块的输入数据;sig为高电平,data_inout为输出端口,输出顶层模块的结果,即outsigs。其中,数据信号insigs可以通过仿真文件从txt文件中读入。


 

扫描二维码关注公众号,回复: 4565639 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_38621214/article/details/83752612
今日推荐