|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
- module spi_master(
- addr,
- in_data,
- out_data,
- wr,
- rd,
- cs,
- clk,
- miso,
- mosi,
- sclk
- );
- input[1:0]addr;
- input [7:0]in_data;
- output [7:0]out_data;
- reg [7:0]out_data;
- input clk;
- input wr;
- input rd;
- input cs;
- inout miso;
- inout mosi;
- inout sclk;
- reg sclk_buffer = 0;
- reg mosi_buffer = 0;
- reg busy = 0;
- reg [7:0]in_buffer = 0;
- reg [7:0]out_buffer = 0;
- reg [7:0]clkcount = 0;
- reg [7:0]clkdiv = 0;
- reg [4:0]count = 0;
- always@(cs or rd or addr or out_buffer or busy or clkdiv) begin
- out_data = 8'bx;
- if(cs&&rd) begin
- case(addr)
- 2'b00 : out_data = out_buffer;
- 2'b01 : out_data = {7'b0,busy};
- 2'b10 : out_data = clkdiv;
- default: out_data = out_data;
- endcase
- end
- end
- always@(posedge clk) begin
- if(!busy) begin
- if(cs&&wr) begin
- case(addr)
- 2'b00 : begin
- in_buffer <= in_data;
- busy <= 1'b1;
- end
- 2'b10 : in_buffer <= clkdiv;
- default : in_buffer <= in_buffer;
- endcase
- end// end if(cs&&wr);
- end
- else begin
- clkcount <= clkcount+1;
- if(clkcount >= clkdiv) begin
- clkcount <=0;
-
- if(count%2 == 0) begin
- mosi_buffer <= in_buffer[7];
- in_buffer <= in_buffer<<1;
- end
-
- if(count>0 && count<17) begin
- sclk_buffer <= ~sclk_buffer;
- end
-
- count <= count+1;
-
- if(count > 17) begin
- busy <= 0;
- count <= 0;
- end
- end
- end
- end
- always@(posedge sclk_buffer) begin
- out_buffer = out_buffer<<1;
- out_buffer[0] = miso;
- end
-
- assign sclk=sclk_buffer;
- assign mosi=mosi_buffer;
-
- endmodule
复制代码
这个读功能的测试文件怎么写?写了两个都不对。。 |
|