差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
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.呼吸灯测试代码 
 +代码附件:[[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>​