赞
踩
简单用CS ,CLK,SCLK控制SDA输出
输出:assign O_TESTOUT = R1_I_CS | R1_I_SDA| R1_I_SCK;
对main函数中使用到的函数进行定义,有初始化时钟、引脚的,对时序设置的,在main函数中只通过引用函数来实现功能
对CS、SCLK的下降沿,上升沿的判断,使用?:来幅值给W_I_CS_UP这几个变量。CS、SCLK用多个D触发器就是为了判断两个时间周期里面是否发生跳变,是什么跳变。同时为了时钟同步,对CLK也做多级D触发器。
在CS的下降沿读入串行的IN,经过SCLK上升沿的移位后在CS的上升沿幅值给buf变量后并行输出,这个程序是32位输出的。
与step1相同的是初始化和LED时序
输出32位数据,要分成4次,每次8位
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;
#step4 stm32_spi_read_select_write_fpga_addr_decode
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。