晚上用verilog写了个spi的写模块,一开始综合竟然各种报错,不过还好全是接口的小问题,另外发现对发送位的计数的时候不要总是减1去判断,+1更符合逻辑啊,-1实在是太绕来绕去了。只是判断时就需要判断i是不是等于一个正整数,这个可能对时序要求高一些,不过spi时钟频率比较低,问题应该不大把。下次有空把读的模块也写一下做仿真把。
ps:写代码时发现了复位信号的作用,把状态机复位到idle状态,不然寄存器的值不确定,状态机一开始就不知道在什么状态了。
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2021/09/28 21:41:12
// Design Name:
// Module Name: spi_wr
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module spi_wr(
input clk_50M,
input wren,
// output spi_ready,
input sys_rst,
input[7:0] wr_add,
input[7:0] wr_data,
output csb_n,
output pdwn,
output sclk,
inout dataio
);
reg isout;
reg pdwn;
reg csb_n;
reg sclk;
reg dataout;
assign dataio=isout?dataout:1'bz;