📄 verilog1.v
字号:
// 时钟分配计数器
module clk_up5(clk_en,clk,clr,qout);
input clk_en, clk,clr;
output [4:0] qout;
reg [4:0]qout;
always@(posedge clk)
begin
if (!clr) qout <= 0;
else if (!clk_en)
qout <= 0;
else
qout <=qout +1;
end
endmodule
//SCK时钟逻辑的生成
module sck_logic(clkdiv,cpha,cpol,clk0_mask,clk1_mask,sck_intre,sck_int_fe,
scl_re,sck_fe,ss_in_int,sck,sck_1,reset,clk);
input[1:0]clkdiv;//sck时钟的时钟因子
input cpha; //sck时钟的相位
input cpol; //sck时钟的极性
input clk0_mask;//cpha=0时的sck时钟表征
input clk1_mask;//cpha=1时的sck时钟表征
input reset;
input clk;
output sck_int_re;//内部SCK的上升沿
output sck_int_fe;//内部SCK的下降沿
output sck_re;//外部SCK的下降沿
input ss_in_int;//另一个主机在总线上
inout sck;
inout sck_1;//通过分配SCK时钟得到的内部时钟
wire [4:0]clk_cnt;//时钟分配输出
wire clk_cnt_en;//时钟分配记数使能
wire clk_cnt_rst;//记数复位
reg sck_int_d1;
reg sck_int;//cpha=1时的sck
reg sck_0;//cpha=0时的sck
reg sck_out;//用来输出sck
reg sck_d1;
reg [1:0] temp;
wire sck_int_re,sck_int_fe,sck_re, sck_fe,clk_en,clr,clk,sck_1;
wire [4:0] qout;
clk_up5 m0(.clk_en(clk_cnt_en),.clr(clk_en_rst),.clk(clk),.qout(clk_cnt));
assign clk_cnt_en=1;
//生成内部时钟
always@(posedge clk or negedge reset)
begin
if(!reset)
sck_int=0;
else
case(clkdiv)
2'b00:sck_int = clk_cnt[1];//clk_cnt时钟分配输出//sck_int:cpha=1时的sck
2'b01:sck_int = clk_cnt[2];//sck_int:cpha=1时的sck
2'b10:sck_int = clk_cnt[3];
2'b11:sck_int = clk_cnt[4];
default: sck_int =0;
endcase
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -