微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 这个测试文件怎么写?

这个测试文件怎么写?

时间:10-02 整理:3721RD 点击:

  1. module spi_master(
  2.                         addr,
  3.                         in_data,
  4.                         out_data,
  5.                         wr,
  6.                         rd,
  7.                         cs,
  8.                         clk,
  9.                         miso,
  10.                         mosi,
  11.                         sclk
  12.     );
  13. input[1:0]addr;
  14. input [7:0]in_data;
  15. output [7:0]out_data;
  16. reg [7:0]out_data;
  17. input clk;
  18. input wr;
  19. input rd;
  20. input cs;
  21. inout miso;
  22. inout mosi;
  23. inout sclk;

  24. reg sclk_buffer = 0;
  25. reg mosi_buffer = 0;
  26. reg busy = 0;

  27. reg [7:0]in_buffer = 0;
  28. reg [7:0]out_buffer = 0;
  29. reg [7:0]clkcount = 0;
  30. reg [7:0]clkdiv = 0;
  31. reg [4:0]count = 0;

  32. always@(cs or rd or addr or out_buffer or busy or clkdiv) begin
  33.         out_data = 8'bx;
  34.         if(cs&&rd) begin
  35.                 case(addr)
  36.                         2'b00 : out_data = out_buffer;
  37.                         2'b01 : out_data = {7'b0,busy};
  38.                         2'b10 : out_data = clkdiv;
  39.                         default: out_data = out_data;
  40.                 endcase
  41.         end
  42. end

  43. always@(posedge clk) begin
  44.         if(!busy) begin
  45.                 if(cs&&wr) begin
  46.                         case(addr)
  47.                                 2'b00 : begin
  48.                                         in_buffer <= in_data;
  49.                                         busy <= 1'b1;
  50.                                         end
  51.                                 2'b10 : in_buffer <= clkdiv;
  52.                                 default : in_buffer <= in_buffer;
  53.                         endcase
  54.                 end// end if(cs&&wr);
  55.         end
  56.         else begin
  57.                 clkcount <= clkcount+1;
  58.                 if(clkcount >= clkdiv) begin
  59.                         clkcount <=0;
  60.                        
  61.                         if(count%2 == 0) begin
  62.                                 mosi_buffer <= in_buffer[7];
  63.                                 in_buffer <= in_buffer<<1;
  64.                         end
  65.                        
  66.                         if(count>0 && count<17) begin
  67.                                 sclk_buffer <= ~sclk_buffer;
  68.                         end
  69.                        
  70.                         count <= count+1;
  71.                        
  72.                         if(count > 17) begin
  73.                                 busy <= 0;
  74.                                 count <= 0;
  75.                         end
  76.                 end
  77.         end
  78. end

  79.         always@(posedge sclk_buffer) begin
  80.                 out_buffer = out_buffer<<1;
  81.                 out_buffer[0] = miso;
  82.         end
  83.        
  84.         assign sclk=sclk_buffer;
  85.         assign mosi=mosi_buffer;
  86.        
  87. endmodule

复制代码


这个读功能的测试文件怎么写?写了两个都不对。

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

网站地图

Top