SPI主机的Verilog代码及验证(优化版)

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

这次重新写了一遍初学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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值