(1)       扫描频率和闪耀频率?

【黑金教程笔记之003】【建模篇】【Lab 02 闪耀灯和流水灯】—笔记-LMLPHP

【黑金教程笔记之003】【建模篇】【Lab 02 闪耀灯和流水灯】—笔记-LMLPHP

模块:

/****************************************
module name:flash_module
function:flash a led at 10Hz by yf.x
2014-11-4 ***************/ module flash_module(
CLK,
RST_n,
LED
); input CLK,RST_n;
output LED; /*********************************/
//DE2-115 use 50MHz osc, 50M*0.05-1=2_499_999
parameter T50ms='d2_499_999; /*********************************/ reg [:]count1; always @(posedge CLK or negedge RST_n)
if(!RST_n)
count1<='d0;
else if(count1==T50ms)
count1<='d0;
else
count1<=count1+'b1; /************************************/ reg rLED; always @(posedge CLK or negedge RST_n)
if(!RST_n)
rLED<='b0;
else if(count1==T50ms)
rLED<=~rLED; /*********************************/ assign LED=rLED; endmodule
 /***********************************
module name:run_module
function:3 led light on one bye one at
each 100ms. by yf.x
2014-11-04
***********************************/ module run_module(
CLK,
RST_n,
LED
); input CLK;
input RST_n;
output [:]LED; /****************************************/
//DE2-115 use 50MHz osc,50M*0.001-1=49_999
parameter T1ms='d49_999; /****************************************/ reg [:]count1; always @(posedge CLK or negedge RST_n)
if(!RST_n)
count1<='d0;
else if(count1==T1ms)
count1<='d0;
else
count1<=count1+'b1; /**************************************/ reg [:] count_ms; always @(posedge CLK or negedge RST_n)
if(!RST_n)
count_ms<='d0;
else if(count_ms=='d100) //100ms
count_ms<='d0;
else if(count1==T1ms)
count_ms<=count_ms+'b1; /*************************************/ reg [:]rLED; always @(posedge CLK or negedge RST_n)
if(!RST_n)
rLED<='b001;
else if(count_ms=='d100)
begin
if(rLED=='b000)
rLED<='b001;
else
rLED<={rLED[:],'b0};
end /*************************************/ assign LED=rLED; endmodule
 /****************************************
module name:mix_module
function:top module,flash 1 led and run 3 led pin assignments(for DE2_115)
----------------------------------------
CLK------------------------CLOCK_50
RST_n----------------------KEY[0]
Flash_LED------------------LEDG[3]
Run_LED[2:0]---------------LEDG[2:0] *****************************************/ module mix_module(
CLK,
RST_n,
Flash_LED,
Run_LED
); input CLK;
input RST_n;
output Flash_LED;
output [:]Run_LED; /**************************************/ wire flash_led; flash_module u0(
.CLK(CLK),
.RST_n(RST_n),
.LED(flash_led)
); /************************************/ wire [:] run_led; run_module u1(
.CLK(CLK),
.RST_n(RST_n),
.LED(run_led)
); /***********************************/ assign Flash_LED=flash_led;
assign Run_LED=run_led; /************************************/ endmodule

实验二说明:

(1)       flash_module.v是一个闪烁灯模块,闪烁频率为10Hz。

(2)       run_module.v是一个流水灯模块,扫描频率为3.3Hz。基本编程技巧:1ms的计数器->100ms的计数器->移位操作。

实验二完成框图:

【黑金教程笔记之003】【建模篇】【Lab 02 闪耀灯和流水灯】—笔记-LMLPHP

实验二结论:

思维倾向“并行操作”对Verilog hdl语言的理解非常重要。

实验二疑问:

(1)run_module.v模块里为何先写一个1ms的计数器,再用1ms的驱动完成一个100ms的计数器,而不是直接写一个100ms的计数器?

05-04 03:16