今天看了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;
leawise_816723039 2014-5-4 11:07
残弈悟恩 2014-4-4 21:54