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; |