硬件平台:Altera MAX II EPM240T100C5N
软件平台:Quartus II 9.1 ModelSim-Altera 6.5b (Quartus II 9.1) Starter Edition
操作系统:win8
cpld的代码设计与传统C语言设计有很大不同,要基于并行的思想。
学习cpld第一天先买了一块特权同学的入门级开发板+边学边练快速入门Verilog/VHDL,搭建环境,安装USB blaster 驱动,跑了一下自带例程,学习并分析修改了这个例程,阅读书籍前4章,对Verilog语法有了初步了解,分下第一个分频器代码。
module clkdiv(
clk,rst_n,
clk_div
);
input clk; //50MHz
input rst_n; //低电平复位信号
output clk_div; //分频信号,连接到蜂鸣器
//---------------------------------------------------
reg[23:0] cnt; //分频计数器
always @ (posedge clk or negedge rst_n) //异步复位
if(!rst_n) cnt <= 24'd0;
else cnt <= cnt+1'b1; //寄存器cnt 20ms循环计数
//----------------------------------------------------
reg clk_div_r; //clk_div信号值寄存器
always @ (posedge clk or negedge rst_n)
if(!rst_n) clk_div_r <= 1'b0;
else if(cnt == 24'hffffff) clk_div_r <= ~clk_div_r; //每20ms让clk_div_r值翻转一次
assign clk_div = clk_div_r;
endmodule
module clkdiv(
clk,rst_n,
clk_div
);
module <模块名> (端口信号列表,....)
//逻辑代码
endmodule
input clk; //50MHz
input rst_n; //低电平复位信号
output clk_div; //分频信号,连接到蜂鸣器
input output inout 是端口声明,还需要在Quartus II 开发环境中指定要分配的管脚,这部分还没有学习,以后再加入。
always @ (posedge clk or negedge rst_n) //异步复位
if(!rst_n) cnt <= 24'd0;
else cnt <= cnt+1'b1; //寄存器cnt 20ms循环计数
always 我现在是理解为 硬件触发条件 posedge是上升沿 negedge 是下降沿
cnt <= 24'd0 cnt赋值为0
24’d0 这种常量表示定义为
<长度><数制><数值>
本例中 为24位宽的十进制数0
其他的数值还有 d 十进制 h 十六进制 b 二进制