打算設計乙個簡單的微程式控制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
assign
和always
塊的邏輯功能是同時進行(並行)的,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 ...