Verilog HDL學(xué)習(xí)(3)

第4個示例.七段數(shù)碼管

七段數(shù)碼管程序第一部分

七段數(shù)碼管程序第二部分

這里新的語法點就是{,,}代表的拼接運算符,有點像C語言里的strcat函數(shù)

第5個示例.D觸發(fā)器——時序邏輯電路的描述方法

module d_ff (q, d, clk);
output q;
input d, clk;
reg q;
always @(posedge clk)
q=d;
endmodule

posedge上升沿檢測語句(從0 變?yōu)? 、0 變?yōu)閤 和z 、或者從x ,z 變?yōu)?),negedge下降沿(從1 變?yōu)? 、1 變?yōu)閤 和z 或者從x ,z 變?yōu)?)

這里既然進(jìn)入了時序電路單元的描述,首先了解Verilog中變量的賦值
Verilog有兩種賦值語句:
1.assign:連續(xù)賦值語句,=賦值,主要用于組合邏輯
2.always:過程賦值,reg變量賦值,分兩類:阻塞類“=”(意味著立即執(zhí)行),非阻塞類“<=”(語句塊中的語句同時被賦值),通常時序用后者
同時,有以下原則需要遵守:
 原則1 :在同一個always 塊中同時建立時序和組合邏輯電
路時,用非阻塞賦值。
 原則2:在同一個always 塊中不要同時使用非阻塞賦值和
阻塞賦值。
 原則3 :不要在多個always 塊中為同一個變量賦值

阻塞賦值示例

非阻塞賦值

第6個示例.計數(shù)器

同步清零4位加法計數(shù)器

module count(out,data,load,reset,clk);
output[7:0] out;
input[7:0] data;
input load,clk,reset;
reg[7:0] out;
always @(posedge clk) //clk 上升沿觸發(fā)
begin
if (!reset) out <= 8'h00; // 同步 清零,低電平有效

else if (!load) out <= data; // 同步置數(shù)
else out <= out + 1; // 計數(shù)
end
endmodule

熟悉if(?。┦浅绦虻陀行У谋磉_(dá)

異步清零

module count2(out,reset,clk);
output[7:0] out ;
input clk, reset ;
reg[7:0] out ;
always @(posedge clk or negedge reset)
begin
if(!reset)
out<= 0 ;
else
out<= out + 1; // 計數(shù)
end
endmodule

扭環(huán)形計數(shù)器

扭環(huán)形計數(shù)器
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容