This repository has been archived on 2023-04-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
vivado-202304/projects/duifei/duifei_cmos/rtl/Sisyif_src/spi_salve.v
T
josh 2e92604bfb add xc7z100 modules; add duifei_cmos;
the modification to dl84_k7_cal_coarse is not complete
2023-03-30 17:18:05 +08:00

172 lines
4.4 KiB
Verilog

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2020/09/02 10:48:55
// Design Name:
// Module Name: d
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
// SPI时钟频率50MHz。每一帧数据12个字节,共96bit数据。
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module spi_slave#(
parameter BIT_NUM = 96
)
(
input i_sys_clk,
input i_sys_rst_n,
input i_spi_sck, //从机在时钟下降沿采样数据
input i_spi_cs, //低电平时从机接收数据指令
input i_spi_sdi,
output [31:0] o_frame_count, //帧计数
output [15:0] o_fre_code , //天线频率
output [7:0] o_tx_mgc, //发射MGC
output [3:0] o_model, //模式字
output [3:0] o_rf_en, //射频使能
output [3:0] o_cal1_mgc, //接收校准1mgc
output [3:0] o_cal2_mgc, //接收校准2mgc
output [3:0] o_cal3_mgc, //接收校准3mgc
output [3:0] o_cal4_mgc, //接收校准4mgc
output [7:0] o_tx_cal_mgc, //发射校准mgc
output [7:0] o_rx1_mgc, //接收1mgc
output [7:0] o_rx2_mgc, //接收2mgc
output [7:0] o_rx3_mgc, //接收3mgc
output [7:0] o_rx4_mgc , //接收4mgc
output [3:0] o_ceshi_model
);
reg [BIT_NUM -1:0] receive_data;
reg [3:0] rf_en ;
reg [3:0] model;
reg [31:0] frame_count;
reg [11:0] fre_code;
reg [7:0] tx_mgc;
reg [7:0] rx1_mgc;
reg [7:0] rx2_mgc;
reg [7:0] rx3_mgc;
reg [7:0] rx4_mgc;
reg [3:0] cal1_mgc;
reg [3:0] cal2_mgc;
reg [3:0] cal3_mgc;
reg [3:0] cal4_mgc;
reg [7:0] tx_cal_mgc;
reg [3:0] ceshi_module;
assign o_frame_count= frame_count;
assign o_fre_code = {4'b0,fre_code};
assign o_rf_en = rf_en;
assign o_model = model;
assign o_tx_mgc = tx_mgc;
assign o_cal1_mgc = cal1_mgc;
assign o_cal2_mgc = cal2_mgc;
assign o_cal3_mgc = cal3_mgc;
assign o_cal4_mgc = cal4_mgc;
assign o_tx_cal_mgc = tx_cal_mgc;
assign o_rx1_mgc = rx1_mgc;
assign o_rx2_mgc = rx2_mgc;
assign o_rx3_mgc = rx3_mgc;
assign o_rx4_mgc = rx4_mgc;
assign o_ceshi_model = ceshi_module;
always @ ( negedge i_spi_sck or negedge i_sys_rst_n)begin
if( !i_sys_rst_n )
receive_data <= 'b0;
else if(i_spi_cs == 1'b0)
receive_data <= {receive_data,i_spi_sdi};
else
receive_data <= receive_data;
end
reg [2:0] cs_reg;
always @ ( posedge i_sys_clk or negedge i_sys_rst_n)begin
if( !i_sys_rst_n )
cs_reg <= 3'b111;
else
cs_reg <= {cs_reg[1:0],i_spi_cs};
end
always @ ( posedge i_sys_clk or negedge i_sys_rst_n)begin
if(!i_sys_rst_n)begin
tx_cal_mgc<=8'h0;
end
else if(cs_reg[2:1]==2'b01 && (receive_data[95:88] == 8'hbb) && (receive_data[7:0] == 8'hdd))begin
tx_cal_mgc<=receive_data[15:8];
end
else begin
tx_cal_mgc<=tx_cal_mgc;
end
end
always @ ( posedge i_sys_clk or negedge i_sys_rst_n)begin
if(!i_sys_rst_n)begin
fre_code <= 12'h6d6;
tx_mgc <= 8'h00;
rf_en <= 4'b1;
model <= 4'b0;
frame_count <= 32'd1;
rx1_mgc <= 4'h0;
rx2_mgc <= 4'h0;
rx3_mgc <= 4'h0;
rx4_mgc <= 4'h0;
cal1_mgc <= 4'h0;
cal2_mgc <= 4'h0;
cal3_mgc <= 4'h0;
cal4_mgc <= 4'h0;
ceshi_module <= 4'h0;
end
else if(cs_reg[2:1]==2'b01 && (receive_data[95:88] == 8'haa) && (receive_data[7:0] == 8'hcc))begin
frame_count <= frame_count+1'b1;
rf_en <= receive_data[87:84];
model <= receive_data[83:80];
ceshi_module<= receive_data[79:76];
fre_code <= receive_data[75:64];
tx_mgc <= receive_data[63:56];
cal1_mgc <= receive_data[55:52];
cal2_mgc <= receive_data[51:48];
cal3_mgc <= receive_data[47:44];
cal4_mgc <= receive_data[43:40];
rx1_mgc <= receive_data[39:32];
rx2_mgc <= receive_data[31:24];
rx3_mgc <= receive_data[23:16];
rx4_mgc <= receive_data[15:8];
end
else begin
frame_count <= frame_count ;
rf_en <= rf_en ;
model <= model ;
fre_code <= fre_code ;
tx_mgc <= tx_mgc ;
cal1_mgc <= cal1_mgc ;
cal2_mgc <= cal2_mgc ;
cal3_mgc <= cal3_mgc ;
cal4_mgc <= cal4_mgc ;
rx1_mgc <= rx1_mgc ;
rx2_mgc <= rx2_mgc ;
rx3_mgc <= rx3_mgc ;
rx4_mgc <= rx4_mgc ;
end
end
endmodule