verilog spi slave回环模拟

本篇作为学习verilog过程中一个动手编码的尝试,主要从网上找的基础代码再加上自己的一些修改。一来可以加深对verilog语法的了解,二来也有助于有硬件有更深入的了解

复制代码
module spi_slave(miso, clk, ss, mosi);

reg [7:0] tx;
reg [7:0] rx;
reg [3:0] cnt;
reg rwflag; //0 read , 1 write
output miso;
input clk, ss, mosi;

initial
begin
	//tx = 8'b0100_1111;
    rx = 0;
    cnt = 0;
    rwflag = 0;
end
assign miso = rx[0];
always @(posedge clk)
begin
	$display("spi_slave cnt=%d, ss=%b mosi=%b miso=%b", cnt, ss, mosi, miso);
	if (!ss) begin
    	if (cnt < 8 && !rwflag) begin
        	rx[cnt] <= mosi;
            cnt <= cnt + 1;
        end else begin
        	$display("xxxxxxxxx");
        	rwflag <= 1;
            if (cnt >= 0) begin
        		rx <= rx >> 1;
            	cnt <= cnt - 1;
            end
        end
    end else begin
    	$display("higt ss");
    	rwflag = 0;
        cnt = 0;
        rx = 8'b0000_0000;
    end
end

endmodule

module stimulus;

wire miso;
reg clk, ss;
reg [7:0] mosi;
reg cin;
integer cnt;

spi_slave spi0(miso, clk, ss, cin);

initial
begin
    clk = 0;
    ss =1;
    mosi = 8'b0110_1010;
    cnt = 8;
    cin = 0;
end

initial
begin
    ss = 0;
    #600 ss = 1;
end

initial
begin
	$monitor($time, "stimulus cin=%b, miso=%b mosi=%b, cnt=%d",cin, miso, mosi, cnt);
end   
always #20
begin
	clk = ~clk;
    if (cnt > 0 && clk)
    begin
    	cin <= mosi[0];
    	mosi <= mosi >> 1;
        cnt <= cnt - 1;
    end
end    
endmodule

上述代码比较简单,主要有两个module。一个spi回环模拟模块,一个激励模块。

  • spi_slave模块模拟spi协议。当ss被拉低时,代表主机选择与本从机通信。clk由主机提供,在clk上升延的时候,进行数据的读取和发送
  • stimulus作为激励模块,来验证slave模块是否达到目地
  • 下图是用modelsim进行仿真验证输出的结果


    上述cin是输入,miso是输出。可以看到输入与输出的数据波形是一样的数据都是0100110
相关推荐
風清掦12 小时前
【STM32学习笔记-14】WDG看门狗 - 14.2 WWDG窗口看门狗
笔记·stm32·单片机·嵌入式硬件·学习·fpga开发
尤老师FPGA15 小时前
HDMI数据的接收发送实验(十二)
fpga开发
坏孩子的诺亚方舟19 小时前
FPGA神经网络数学基础0
人工智能·神经网络·线性代数·fpga开发
熠速19 小时前
PolarBox高性能实时仿真系统
arm开发·fpga开发·嵌入式实时数据库·硬件在环半实物仿真
南檐巷上学20 小时前
基于Zynq-7020的带有正弦波发生器的8051软核设计
单片机·嵌入式硬件·fpga开发·fpga
思尔芯S2C20 小时前
FPGA原型验证中的内存模型应用:基于DDR5的Linux系统启动与测试
fpga开发·内存模型·ddr4·ddr5·memory model·hbm3·prototyping
hai3152475431 天前
RISC-V CVA6 AXI适配器+DMA桥蜂鸟E203处理器的总线接口单元(BIU)仲裁器
驱动开发·fpga开发·硬件架构·硬件工程·精益工程
高速上的乌龟1 天前
Lattice LFCPNX-100 HSB+Fpga开发详解:2.3 Hololink 顶层模块深度全解析
linux·fpga开发
ALINX技术博客1 天前
【FPGA 开发教程】基于 ALINX FPGA 开发板实现 USB3.2 高速通信(Z7-P+FL2010)
fpga开发·fpga·fmc子卡·usb3.2通信
Ricky05532 天前
搭载实时 FPGA 处理系统的航天器上用于海上监视的超分辨率YOLO目标检测技术(意大利2026年研究)
yolo·目标检测·fpga开发