微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > 例说FPGA连载53:NAND Flash实例之Avalon-MM总线

例说FPGA连载53:NAND Flash实例之Avalon-MM总线

时间:11-28 来源:互联网 点击:

  input            clk;

  input            reset_n;

  input            write_n;

  input   [ 31: 0] writedata;

  wire             clk_en;

  reg              data_out;

  wire             out_port;

  wire             read_mux_out;

  wire    [ 31: 0] readdata;

  assign clk_en = 1;

  //s1, which is an e_avalon_slave

  assign read_mux_out = {1 {(address == 0)}} & data_out;

  always @(posedge clk or negedge reset_n)

    begin

      if (reset_n == 0)

          data_out <= 0;

      else if (chipselect && ~write_n && (address == 0))

          data_out <= writedata;

    end

  assign readdata = {32'b0 | read_mux_out};

  assign out_port = data_out;

endmodule

        如图6.10所示,从工程的RTL视图里也可以看到PIO_LED外设的接口信号,和代码里的接口是一致的。


图6.10 PIO外设的RTL视图

这些接口中,作为inputs的信号中,时钟信号clk、复位信号reset_n是由系统提供的。其他几个信号如地址信号address、片选信号chipselect、写选通信号write_n和写入数据writedata都是Avalon总线上的常用信号。简单的来看,使用这几个信号组成的Avalon总线接口写时序如图6.11所示。


图6.11 PIO外设的写时序波形

        写选通信号和片选信号的有效时钟周期数也都是可变的,甚至地址和数据的有效时钟宽度也都是可调整的。由此足见Avalon接口的灵活性,尤其在开发者自己设计Avalon从机作为Qsys上的一个自定义组件时,我们更是可以根据从机的实际状况将各个接口信号的时序关系调整到一个最优的状态。

        回过头来,再看前面给出的从机底层代码,用文字描述可能会显得比读代码更枯燥,因为波形都给出来了,有点基础的朋友恐怕都更愿意去对照着波形解读代码。这里的接口代码只是一种最简洁的写法,里面有一些技巧,我们可以模仿,但是不要把思路限制住,我们要活学活用,如此你才会逐渐发觉——设计原来如此简单。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top