waveform_acquisition_FPGA_code/puart2/spi_master_2164.v.bak

117 lines
4.9 KiB
Coq
Raw Normal View History

2025-12-11 18:35:48 +08:00
module spi_master_2164(
input sys_clk,
input rst_n,
input [15:0] din,
output reg [31:0] dout,
output reg done,
// connect to 2164
output reg sclk,
output reg cs_n,
output reg mosi,
input miso,
// for test only
output reg [5:0] cnt // count to 42
);
reg [31:0] dout_r;
//================== cnt =====================//
always @ (posedge sys_clk or negedge rst_n) begin
if(!rst_n)
cnt <= 'd0;
else if(cnt == 'd41)
cnt <= 'd0;
else
cnt <= cnt + 1'b1;
end
//================== send data ===============//
always @ (posedge sys_clk or negedge rst_n) begin
if(!rst_n) begin
sclk <= 1'b0;
cs_n <= 1'b1;
mosi <= 1'b0;
end
else begin
case(cnt)
6'd0: begin cs_n <= 1'b1; sclk <= 1'b0; mosi <= 1'b0; end
6'd1: begin cs_n <= 1'b1; sclk <= 1'b0; mosi <= 1'b0; end
6'd2: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= 1'b0; end
6'd3: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[15]; end
6'd4: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[15]; end
6'd5: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[14]; dout_r <= {dout_r[30:0],miso}; end
6'd6: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[14]; dout_r <= {dout_r[30:0],miso}; end
6'd7: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[13]; dout_r <= {dout_r[30:0],miso}; end
6'd8: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[13]; dout_r <= {dout_r[30:0],miso}; end
6'd9: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[12]; dout_r <= {dout_r[30:0],miso}; end
6'd10: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[12]; dout_r <= {dout_r[30:0],miso}; end
6'd11: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[11]; dout_r <= {dout_r[30:0],miso}; end
6'd12: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[11]; dout_r <= {dout_r[30:0],miso}; end
6'd13: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[10]; dout_r <= {dout_r[30:0],miso}; end
6'd14: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[10]; dout_r <= {dout_r[30:0],miso}; end
6'd15: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[9]; dout_r <= {dout_r[30:0],miso}; end
6'd16: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[9]; dout_r <= {dout_r[30:0],miso}; end
6'd17: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[8]; dout_r <= {dout_r[30:0],miso}; end
6'd18: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[8]; dout_r <= {dout_r[30:0],miso}; end
6'd19: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[7]; dout_r <= {dout_r[30:0],miso}; end
6'd20: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[7]; dout_r <= {dout_r[30:0],miso}; end
6'd21: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[6]; dout_r <= {dout_r[30:0],miso}; end
6'd22: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[6]; dout_r <= {dout_r[30:0],miso}; end
6'd23: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[5]; dout_r <= {dout_r[30:0],miso}; end
6'd24: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[5]; dout_r <= {dout_r[30:0],miso}; end
6'd25: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[4]; dout_r <= {dout_r[30:0],miso}; end
6'd26: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[4]; dout_r <= {dout_r[30:0],miso}; end
6'd27: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[3]; dout_r <= {dout_r[30:0],miso}; end
6'd28: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[3]; dout_r <= {dout_r[30:0],miso}; end
6'd29: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[2]; dout_r <= {dout_r[30:0],miso}; end
6'd30: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[2]; dout_r <= {dout_r[30:0],miso}; end
6'd31: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[1]; dout_r <= {dout_r[30:0],miso}; end
6'd32: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[1]; dout_r <= {dout_r[30:0],miso}; end
6'd33: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= din[0]; dout_r <= {dout_r[30:0],miso}; end
6'd34: begin cs_n <= 1'b0; sclk <= 1'b1; mosi <= din[0]; dout_r <= {dout_r[30:0],miso}; end
6'd35: begin cs_n <= 1'b0; sclk <= 1'b0; mosi <= 1'b0; dout_r <= {dout_r[30:0],miso}; end
6'd36: begin cs_n <= 1'b1; sclk <= 1'b0; mosi <= 1'b0; dout_r <= {dout_r[30:0],miso}; end
6'd37: begin cs_n <= 1'b1; sclk <= 1'b0; mosi <= 1'b0; end
6'd38: begin cs_n <= 1'b1; sclk <= 1'b0; mosi <= 1'b0; end
6'd39: begin cs_n <= 1'b1; sclk <= 1'b0; mosi <= 1'b0; end
6'd40: begin cs_n <= 1'b1; sclk <= 1'b0; mosi <= 1'b0; end
6'd41: begin cs_n <= 1'b1; sclk <= 1'b0; mosi <= 1'b0; end
default: begin cs_n <= 1'b1; sclk <= 1'b0; mosi <= 1'b0; end
endcase
end
end
//================ done =================//
always @ (posedge sys_clk or negedge rst_n) begin
if(!rst_n)
done <= 1'b0;
else if(cnt == 'd41)
done <= 1'b1;
else
done <= 1'b0;
end
//================ dout =================//
always@(posedge sys_clk or negedge rst_n) begin
if(!rst_n)
dout <= 'd0;
else if(cnt == 'd41)
dout <= dout_r;
else
dout <= dout;
end
endmodule