差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 后一修订版 | 前一修订版 | ||
|
breath_led [2021/09/13 01:46] gongyu 创建 |
breath_led [2021/09/13 10:56] (当前版本) gongyu [9. 参考文档] |
||
|---|---|---|---|
| 行 111: | 行 111: | ||
| ### 9. 参考文档 | ### 9. 参考文档 | ||
| - | * [[脉冲发生器]] | + | * [[pulse_gen|脉冲发生器]] |
| * {{:machxo2familydatasheet.pdf|Lattice MachXO2数据手册}} | * {{:machxo2familydatasheet.pdf|Lattice MachXO2数据手册}} | ||
| - | ### 10. 相关文档 | + | ### 10. 参考代码 |
| + | #### 10.1 呼吸灯代码: | ||
| + | 代码附件 - [[Breath_led.v|呼吸灯verilog代码]] | ||
| + | <code verilog> | ||
| + | // -------------------------------------------------------------------- | ||
| + | // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<< | ||
| + | // -------------------------------------------------------------------- | ||
| + | // Module: Breath_led | ||
| + | // | ||
| + | // Author: Step | ||
| + | // | ||
| + | // Description: PWM-Breath_led | ||
| + | // | ||
| + | // Web: www.ecbcamp.com | ||
| + | // | ||
| + | // -------------------------------------------------------------------- | ||
| + | // Code Revision History : | ||
| + | // -------------------------------------------------------------------- | ||
| + | // Version: |Mod. Date: |Changes Made: | ||
| + | // V1.0 |2015/11/11 |Initial ver | ||
| + | // -------------------------------------------------------------------- | ||
| + | module Breath_led # | ||
| + | ( | ||
| + | parameter CNT_NUM = 5000 //period = (5000^2)*2 = 50000000 = 2s | ||
| + | ) | ||
| + | ( | ||
| + | input clk_in, //system clk | ||
| + | input rst_n_in, //system reset | ||
| + | output Breath_led //Breath led output | ||
| + | ); | ||
| - | ^ **文件名称** | **功能** | | + | reg [12:0] cnt1; |
| - | ^ **[[Breath_led.v]]** | **呼吸灯** | | + | //generate cnt1 signal |
| - | ^ **[[Breath_led_test.v]]** | **测试文件** | | + | always@(posedge clk_in or negedge rst_n_in) begin |
| + | if(!rst_n_in) begin | ||
| + | cnt1<=13'd0; | ||
| + | end else begin | ||
| + | if(cnt1>=CNT_NUM-1) cnt1<=1'b0; | ||
| + | else cnt1<=cnt1+1'b1; | ||
| + | end | ||
| + | end | ||
| + | |||
| + | reg flag; | ||
| + | reg [12:0] cnt2; | ||
| + | //generate cnt2 signal | ||
| + | always@(posedge clk_in or negedge rst_n_in) begin | ||
| + | if(!rst_n_in) begin | ||
| + | cnt2<=13'd0; | ||
| + | flag<=1'b0; | ||
| + | end else begin | ||
| + | if(cnt1==CNT_NUM-1) begin | ||
| + | if(!flag) begin | ||
| + | if(cnt2>=CNT_NUM-1) flag<=1'b1; | ||
| + | else cnt2<=cnt2+1'b1; | ||
| + | end else begin | ||
| + | if(cnt2<=0) flag<=1'b0; | ||
| + | else cnt2<=cnt2-1'b1; | ||
| + | end | ||
| + | end else cnt2<=cnt2; | ||
| + | end | ||
| + | end | ||
| + | |||
| + | //Compare cnt1 and cnt2, generate PWM-Breath-led | ||
| + | assign Breath_led = (cnt1<cnt2)?1'b0:1'b1; | ||
| + | |||
| + | endmodule | ||
| + | |||
| + | </code> | ||
| + | |||
| + | #### 10.2 呼吸灯测试代码 | ||
| + | 代码附件:[[Breath_led_test.v|呼吸灯测试代码]] | ||
| + | |||
| + | <code verilog> | ||
| + | // -------------------------------------------------------------------- | ||
| + | // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<< | ||
| + | // -------------------------------------------------------------------- | ||
| + | // Module: Breath_led_test | ||
| + | // | ||
| + | // Author: Step | ||
| + | // | ||
| + | // Description: Testbench for Water_led | ||
| + | // | ||
| + | // Web: www.ecbcamp.com | ||
| + | // | ||
| + | // -------------------------------------------------------------------- | ||
| + | // Code Revision History : | ||
| + | // -------------------------------------------------------------------- | ||
| + | // Version: |Mod. Date: |Changes Made: | ||
| + | // V1.0 |2015/11/11 |Initial ver | ||
| + | // -------------------------------------------------------------------- | ||
| + | `timescale 1ns / 100ps | ||
| + | module Breath_led_test; | ||
| + | |||
| + | parameter CLK_PERIOD = 40; //CLK_PERIOD=40ns, Frequency=25MHz | ||
| + | parameter CNT_NUM = 6; | ||
| + | |||
| + | reg sys_clk; | ||
| + | initial | ||
| + | sys_clk = 1'b0; | ||
| + | always | ||
| + | sys_clk = #(CLK_PERIOD/2) ~sys_clk; | ||
| + | |||
| + | reg sys_rst_n; //active low | ||
| + | initial | ||
| + | begin | ||
| + | sys_rst_n = 1'b0; | ||
| + | #100; | ||
| + | sys_rst_n = 1'b1; | ||
| + | end | ||
| + | |||
| + | wire Breath_led; | ||
| + | Breath_led #(.CNT_NUM(CNT_NUM)) | ||
| + | Breath_led_uut | ||
| + | ( | ||
| + | .clk_in(sys_clk), | ||
| + | .rst_n_in(sys_rst_n), | ||
| + | .Breath_led(Breath_led) | ||
| + | ); | ||
| + | |||
| + | endmodule | ||
| + | |||
| + | </code> | ||