?? verilog1.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 + -