硬件平臺: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 二進制