这次重新写了一遍初学FPGA时写的SPI主机驱动,减少了代码量,舍弃了状态机,补充了同时发送和接受功能的验证
代码
//Module Name:SPI Master
//Author:Yang Cheng Yu
//Date:2020/4/20
`define SIM
module spi_master(
//system signal
input clk,
input rst_n,
//spi_master interface
output reg sclk,
output reg mosi,
input miso,
input [7:0] data_tx,
output reg [7:0] data_rx,
//others
input tx_req,
output reg flag_work,
output cs
);
//parameter and defines
localparam SYS_FRE = 50_000_000;
`ifndef SIM
localparam SCLK_FRE = 1000;
localparam BAUD_CNT_END = SYS_FRE/SCLK_FRE-1;
localparam BAUD_CNT_HALF = SYS_FRE/SCLK_FRE/2-1;
`else
localparam BAUD_CNT_END = 499;
localparam BAUD_CNT_HALF = 249;
`endif
// localparam BAUD_CNT_1_half2 = SYS_FRE/SCLK_FRE/4-1;
//system regs
reg[7:0] data_tx_reg;
reg[15:0] cnt_baud;
reg[2:0] cnt_bit;
reg tx_req_t0;
reg tx_req_t1;
wire trig_tx_req;
wire flag_bit;
reg[7:0] data_rx_reg;
//main_code
//trig_tx_req
always @(posedge clk)begin
tx_req_t0 <= tx_req;
tx_req_t1 <= tx_req_t0;
end
assign trig_tx_req = tx_re

本文介绍了一种简化版的SPI主机驱动设计,通过减少代码量并去除状态机,实现了同时发送和接收数据的功能。文章详细展示了Verilog代码实现,并通过仿真验证了其正确性。
877

被折叠的 条评论
为什么被折叠?



