⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 verilog1.v

📁 一些很好的FPGA设计实例
💻 V
字号:
//输入的数据首先送入一个8位的移位寄存器中,并由位记数器
//来记数移位输入的位数,生成字节数据,然后 分别由SCK的上升沿和下降沿控制输入
//两个MISO的接收寄存器
//当所有的位被接受后主控制器就可以从接收寄存器中收到读取 收到数据了


//SPI接收数据模块
module spi_rcv_shift_reg(miso,shift_en,sck_re,sck_fe,rcv_cpol,cpol,ss_in_int,
                         reset,sclk,data_out,rcv_load);
input miso;//串行数据输入
input shift_en;//移位使能
input sck_re,input sck_fe;
input rcv_cpol;//接收时钟级性
input cpol;//spi时钟级性
input ss_in_int,reset,sclk;
output[7:0]data_out;//移位数据输出
output rcv_load;//发送给控制器的载入信号


reg[7:0]data_int;
wire shift_in;//移位输入数据
reg miso_neg;//sck下降沿锁定数据
reg miso_pos;//sck上升沿锁定数据
reg [2:0]rcv_bitcnt_int;//内部位记数
wire[7:0]data_out;
wire rcv_load;


//SPI接收移位寄存器
always @(posedge sclk or negedge reset or negedge ss_in_int)
   begin
      if(!reset||!ss_in_int)
      data_int <= 0;
      else if!(shift_en)
             data_int <= {data_int[6],data_int[5],data_int[4],
                         data_int[3],data_int[2],data_int[1], data_int[0],shift_in
	                     };
	end
//MISO接收移位寄存器
//sck上升沿寄存器
always @(posedge sclk or negedge reset or negedge ss_in_int)
   begin	
      if(!reset||!ss_in_int)
      miso_pos <= 0;
      else
      miso_pos <= miso;
   end
//sck下降沿寄存器
always @(posedge sclk or negedge reset or negedge ss_in_int)
   begin	
      if(!reset||!ss_in_int)
      miso_neg <= 0;
      else
      miso_neg <= miso;
   end
assign shift_in=(rcv_cpol)? miso_pos:miso_neg;
assign data_out ={data_int[6:0],shift_in};
//位记数器
always @(posedge sclk or negedge reset or negedge shift_en)
   begin
        if(!reset ||(shift_en==1))
           rcv_bitcnt_int <=0;
        else
           rcv_bitcnt_int <= rcv_bitcnt_int+1;
end
assign  rcv_bitcnt = rcv_bitcnt_int;
//接收载入
assign rcv_load =(!shift_en&&)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -