程序完成SPI接口

时间:2017-04-22 20:51:05

标签: verilog

我有一个硬件问题要在verilog中写一个片段。 SD0串行数据输出包中总共有16位:8不关心x和8个数据位D7到D0,如图所示。其他参数如下: tDELAY = 16 usec,tSETUP = 2 usec,tHOLD = 12 usec,TSD0 = 15usec,tSCLK = 32 usec,tQUIET = 14 usec,tCS = 2 usec,tDIS 8 usec。

所以我计算并发现最大速率= 1923 Hz样本/秒,最大SCLK频率是1/32 usec = 31250 Hz。

所以问题是,如果主时钟频率是100 MHz,请写一个verilog代码" snippet"执行完整的"三线" SPI接口的最大可能速率。

我开始编写代码片段,但不确定这是否是正确的方法,请告诉我如何编写它,感谢任何帮助。

  module Example (input clk, output reg wdavacl = 0, input [5:0] acladdr,  
        input [7:0] aclwdata, input aclrdav, output reg rdavacl = 0, 
        output reg [7:0] acldata, output reg aclsclk, 
        output reg aclsdi, input aclsdo, output reg aclss = 1);


  integer i; reg [2:0] aclstate = 0; // state register 
  reg [7:0] aclcadr; // command, address

  clock M0(CLK, 26001, clka); //1923 Hz //clkscale = 50000000/frequency
  clock M1(CLK, 1600, clkb); //31250 Hz

  SDO   [7:0] X  [7:0] data

  always@(posedge clk) 
      begin 
          if (aclrdav == 0 && rdavacl == 1) // reset read status 
              begin 
                  rdavacl = 0; aclstate = 0; 
              end 
          if (aclwdav == 0 && wdavacl == 1) //reset write status 
              begin 
                  wdavacl = 0; aclstate = 0; 
              end
          if (aclrdav == 1 && rdavacl == 0) // read data 
              begin
            case (aclstate) 
            0: begin
                    aclcadr[5:0] = acladdr[5:0]; 
                    aclcadr[7:6] = 2'b10;    // read, MB=0 
                    i = 9;
                    aclss = 0;

0 个答案:

没有答案