VHDL語法回顧

2021-07-25 21:30:07 字數 3491 閱讀 7988

打算設計乙個簡單的微程式控制cpu模型,下面是vhdl語法回顧。

/*

vhdl是由模組組成,嵌在module endmodule之間,其他語句均由 ';' 結束

*/module add(a,b,c,sum,count); //模組埠定義

input [2:0] a,b;

input cin;

output [2:0] sum;

output count; //io 定義

//內部變數定義

assign = a + b + cin; // 功能定義

endmodule

常用的是assign(組合邏輯電路)和always(時序電路)

//簡單的計數器    

module count (clk,reset,x,num);

input reset,clk,x;

output [1:0]num;

reg [1:0]num;

always @ (posedge clk) //上公升沿

begin

if(reset)

num=2'b00;

else

case (num)

2'b00 : if(x==0) num<=2'b01;

else num<=2'b11;

2'b01 : if(x==0) num<=2'b10;

else num<=2'b00;

2'b10 : if(x==0) num<=2'b11;

else num<=2'b01;

2'b11 : if(x==0) num<=2'b00;

else num<=2'b10;

endcase

endendmodule

assignalways塊的邏輯功能是同時進行(並行)的,always內的邏輯是順序執行的.

verilog hdl中沒有begin end取代

《位寬》』《進製》《對應的進製數字》

不同位寬應分別定義

8'b0001_0101 //位寬為8位的二進位制數字表示,使用下劃線可以提高可讀性(對數字的大小沒有影響)

8'h15 //位寬為8位的十六進製制數字表示

wire型

wire型別用以assign操作的組合邏輯訊號

預設為wire型

wire a;  //1位的wire型變數

wire[7:0] b; //8位的wire型變數

wire[7:0] c,d; //兩個8位的wire型變數

暫存器型別 reg型

暫存器型別是對資料儲存單元的抽象,always塊內定義的變數都必須是reg型,可以這麼理解:reg型就是在always內使用的變數型別,並不一定是暫存器或者觸發器的輸出

基本算術運算子: + - * / %

關係運算子: > < >= <= ==

賦值運算子: = <=

邏輯運算子: && || !(非)

位運算子: & | ~(反) `(亦或)

拼接符:

非阻塞賦值<= : 塊結束後,才完成賦值;值不是立即改變的;在always塊中常使用此種方法。

阻塞賦值 : 立即完成賦值,賦值結束後才能結束塊。可能會產生意想不到的錯誤。

if else
case(變數)

變數值1:

begin

執行語句

end變數值2:

default:

endcase

for()
//模4計數器

module counter4(x,clk,z,l);

input x,clk;

output z,l;

reg[1:0] l;

parameter s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;

always @(posedge clk)

begin

if(x==1)

case(l)

s0: l<=s1;

s1: l<=s2;

s2: l<=s3;

s3: l<=s0;

endcase

else

case(l)

s0: l<=s3; /***時間、always語句和assign的位置*/

s1: l<=s0;

s2: l<=s1;

s3: l<=s2;

endcase

endassign z=((x==1&&l==s3)?1:0)|((x==0&&l==s0)?1:0);

endmodule

//010序列檢查器

module test010(in,out,state,clk,reset);

input in,clk,reset;

output out;

output[2:0]state;

reg[2:0]state;

reg out;

parameter s0='d0,s1='d1,s2='d2;

always @(posedge clk)

begin

if(reset) begin state<=s0; out<=0; end /*控制in的輸入*/

else case(state)

s0:begin

if(in==0) begin state<=s1; out<=0; end

else begin state<=s0; out<=0; end

ends1:begin

if(in==1) begin state<=s2; out<=0; end

else begin state<=s0; out<=0; end

end

s2:begin

if(in==0) begin state<=s0; out<=1; end

else begin state<=s0; out<=0; end

enddefault: state<=s0;

endcase

endendmodule

VHDL語法點滴

1.cnt others 0 這個是給cnt賦零的意思,還可以這樣用 比如說cnt是std logic vector 7 downto 0 那麼cnt 1 1 others 0 就表示給cnt的第1位賦1,其他位的全部都賦0,結果cnt 00000010 2.f1 fi din conv std l...

FPGA綜合與VHDL語法

下面的內容是在富欣實習時總結下來的。綜合相關 1.劉工說,d觸發器最好不要一直重新整理,需要用到使能訊號,若使能訊號是長時間持續的,則需要取其的上公升沿和下降沿。2.以前寫 時,為了防止生成鎖存器,會像下面這樣寫 elsif clk event and clk 1 then if en 1 then...

python基礎語法回顧

列表 1 正向單索引 list1 張三 男 33,江蘇 碩士 已婚 身高178 體重56 取出第乙個元素 print list1 0 取出第四個元素 print list1 3 取出最後乙個元素 print list1 1 print list1 6 取出最最後乙個元素 print list1 1 ...