Untitle[博客大赛]CPLD入门笔记1----点亮LEDd Post

posted May 4, 2014, 6:42 PM by 葉宏
http://bbs.ednchina.com/BLOG_ARTICLE_3019841.HTM

今天看了CPLD的教程,发现可编程芯片几乎都是以点亮LED作为最开始的入门实验,无论51单片机、STM8单片机、STM32单片机亦或是其他的芯片,感觉都是在控制它的引脚的电平,主要是了解如何让指定的引脚输出指定数的脉冲,指定的电平。好了,不多说了,看下代码,实现3个LED的轮番点亮

  计时一个单位时间,让LED0点亮,后进行移位,移位后等待下一个单位时间到来,便点亮LED1,后再移位,依次进行

module CPLD_LED_Delay(clk,rst_n,LED0,LED1,LED2);
   input clk;
   input rst_n;
   output LED0,LED1,LED2;
   
   reg[23:0] Counter;          //定义计数器,设置为寄存器类型
   //如果复位按键,计数器清零,否则进行计数
   always @(posedge clk or negedge rst_n)
      if(!rst_n)  Counter <= 1'd0;
      else Counter <= Counter + 1'b1;
   reg[2:0] led_reg;
   //如果Counter计数到值,
   always @(posedge clk or negedge rst_n)
      if(!rst_n) led_reg <= 4'b001;
      else 
        if(Counter == 24'd15_000_000)
          begin 
            if(led_reg == 4'b100)
            led_reg <= 4'b001;
            else
            led_reg <= led_reg << 1;    //led_reg执行左移一位  
          end
        
  assign {LED2,LED1,LED0} = led_reg;
 
endmodule
代码很简单,不用多解释
对“{}”的一点理解,例如assign {LED2,LED1,LED0} = led_reg;,如果变量led_reg = 100;则LED2 = 1,LED1= 0,LED0 = 0;
另外,若assign Num = {Numa , Numb};
Numa = 1010,Numb = 0110;
则Num = 1010 0110;



Comments