step1 stm32_3pin_to_fpga_input
fpga_spi_input
简单用CS ,CLK,SCLK控制SDA输出 输出:assign O_TESTOUT = R1_I_CS | R1_I_SDA| R1_I_SCK;
stm32_gpio_wave_3pin
对main函数中使用到的函数进行定义,有初始化时钟、引脚的,对时序设置的,在main函数中只通过引用函数来实现功能
step2 stm32_spi_to_fpga_input
fpga_spi_input
对CS、SCLK的下降沿,上升沿的判断,使用?:来幅值给W_I_CS_UP这几个变量。CS、SCLK用多个D触发器就是为了判断两个时间周期里面是否发生跳变,是什么跳变。同时为了时钟同步,对CLK也做多级D触发器。 在CS的下降沿读入串行的IN,经过SCLK上升沿的移位后在CS的上升沿幅值给buf变量后并行输出,这个程序是32位输出的。
stm32_spi_to_fpga_input
与step1相同的是初始化和LED时序 输出32位数据,要分成4次,每次8位
step3 stm32_spi_write_fpga_addr_decode
fpga_spi_input_bus_addr_decode
RTL视图
module spi_bus(//
I_CLK ,
I_CS ,
I_SCLK ,
I_SDIN ,
O_WD ,
O_WE ,
O_TESTOUT1);
input I_CLK ;
input I_CS ;
input I_SCLK ;
input I_SDIN ;
output [16-1:0] O_WD ;
output [32-1:0] O_WE ;
output O_TESTOUT1;
wire[32-1:0] W_U_spi_O_DOUT;
wire W_U_spi_O_DOV ;
spi_in_to_parallel_data_out U_spi_s2p(
.I_CLK (I_CLK ),
.I_CS (I_CS ),
.I_SCLK (I_SCLK),
.I_SDIN (I_SDIN),
.O_DOUT (W_U_spi_O_DOUT),
.O_DOV (W_U_spi_O_DOV ),
.O_TESTOUT1());
wire [16-1:0] W_U_dec_O_DAT;
wire [32 -1:0] W_U_dec_O_DOV;
addr_decode U_decode(
.I_CLK (I_CLK ),
.I_ENA (W_U_spi_O_DOV ), // input enable
.I_DIN (W_U_spi_O_DOUT[15: 0]),
.I_AIN (W_U_spi_O_DOUT[31:16]),
.O_DAT (W_U_dec_O_DAT ),
.O_DOV (W_U_dec_O_DOV ),
.O_TESTOUT1 ());
assign O_WD = W_U_dec_O_DAT;
assign O_WE = W_U_dec_O_DOV;
stm32_spi_to_fpga_bus_addr_decode
#step4 stm32_spi_read_select_write_fpga_addr_decode
|