赞
踩
//第一步模块的输入输出
module flash_module
(
//模块输入输出
CLK,RSTn,LED_Out
);
//第二步定义输入输出
input CLK;
input RSTn;
output LED_Out;
//第三步模块内容
parameter T50MS = 22'd2_499_999;//定义常量
reg[21:0] Count1;//定义变量or寄存器
//仿顺序用法模板 复位;计数;计满清零;//功能延时
always@(posedge CLK or negedge RSTn)
if(!RSTn)
Count1<=0;
else if(Count1 == T50MS)
Count1 <=0;
else
Count1 <= Count1+1'b1;
/****************************************************/
//实现功能部分
reg rLED_Out;
always@(posedge CLK or negedge RSTn)
if(!RSTn)
rLED_Out <= 1'b0;
else if(Count1 == T50MS)
rLED_Out <= ~rLED_Out;
//第四部链接输入输出
assign LED_Out = rLED_Out;
endmodule
//第一步模块的输入输出
module run_module
(
CLK,RSTn,LED_Out
);
//第二步定义输入输出
input CLK;
input RSTn;
output [2:0]LED_Out;//输出位数要标注
/*定义时间//晶振50Mhz
//第三步功能实现1延时
0.001s*50_000_000-1 = 49_999*/
parameter T1MS = 16'd49_999;
/***************************/
reg [15:0] Count1;
always@(posedge CLK or negedge RSTn)
if(!RSTn)
Count1 <= 16'd0;
else if(Count1 == T1MS)
Count1 <= 16'd0;
else
Count1 <= Count1+1'b1;
/*******************************/
//控制
reg [9:0] Count_MS;
always@(posedge CLK or negedge RSTn)
if(!RSTn)
Count_MS <= 10'd0;
else if(Count_MS == 10'd100)
Count_MS <= 10'd0;
else if(Count1 == T1MS)
Count_MS <= Count_MS + 1'd1;
/*********************************/
reg[2:0]rLED_Out;
always@(posedge CLK or negedge RSTn)
if(!RSTn)
rLED_Out <= 3'b001;
else if(Count_MS == 10'd100)
begin
if(rLED_Out == 3'b000)
rLED_Out <= 3'b001;
else
rLED_Out <= {rLED_Out[1:0],1'b0}; //rLED_Out后两位取出,末尾添加0,作为新的rLED_Out
//当rLED_Out为000时,执行39行变为001
//当rLED_Out为001时,执行41行,取后两位01,末尾添0,为010
//当rLED_Out为010时,执行41行,取后两位10,末尾添0,为100
//当rLED_Out为100时,执行41行,取后两位00,末尾添0,为000转第一行
end
/****************************/
//第四步链接输入输出
assign LED_Out = rLED_Out;
/****************************/
endmodule
//第一部分模块的书输入输出
module mix_module
(
CLK,RSTn,Flash_LED,Run_LED
);
//2定义输入输出
input CLK;
input RSTn;
output Flash_LED;
output [2:0]Run_LED;
/***************************/
//3模块1的实例化
wire Flash_LED;//连线Flash_LED
flash_module U1
(
.CLK(CLK),//模块1的CLK由CLK输入
.RSTn(RSTn),//模块1的RSTn由RSTn输入
.LED_Out(Flash_LED)//模块1的LED_Out输出给Flash_Out
);
//3模块2的实例化
wire [2:0]Run_LED;
run_module U2
(
.CLK(CLK),
.RSTn(RSTn),
.LED_Out(Run_LED)
);
/*******************/
//4链接
assign Flash_LED = Flash_LED;
assign Run_LED = Run_LED;
/*******************/
endmodule
1.reg和wire的区别
reg只能在initial和always中赋值,reg使用在过程赋值语句中。
wire只能被assign连续赋值,wire使用在连续赋值语句中。
reg相当于存储单元,wire相当于物理连线
input可以是wire和reg;output必须是wire
wire对应于连续赋值,如assign
reg对应于过程赋值,如always,initial
2.
wire [2:0]Run_LED;
不是必须的;
3.
关于功能模块和控制模块的区别
功能模块是一些基本动作,
而控制模块是动作的集合,实现更加复杂的动作
4.
感谢VerilogHDL那些事儿_建模篇
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。