<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > VHDL設計進(jìn)階:邏輯綜合的原則以及可綜合的代碼設計

VHDL設計進(jìn)階:邏輯綜合的原則以及可綜合的代碼設計

作者: 時(shí)間:2013-08-27 來(lái)源:網(wǎng)絡(luò ) 收藏

編碼器設計方案二。

module encoder2 ( none_on,out2,out1,out0,h,g,f,e,d,c,b,a); //模塊聲明
input h,g,f,e,d,c,b,a;
output none_on,out2,out1,out0; //端口聲明
wire [3:0] outvec; //向量聲明
assign outvec = //使用assign語(yǔ)句實(shí)現輸出向量賦值
h ? 4'b0111 : g ? 4'b0110 : f ? 4'b0101:
e ? 4'b0100 : d ? 4'b0011 : c ? 4'b0010 :
b ? 4'b0001 : a ? 4'b0000 : 4'b1000;
assign none_on = outvec[3]; //使用assign語(yǔ)句進(jìn)行編碼
assign out2 = outvec[2];
assign out1 = outvec[1];
assign out0 = outvec[0];
endmodule

編碼器設計方案三。

module encoder3 ( none_on,out2,out1,out0,h,g,f,e,d,c,b,a); //模塊聲明
input h,g,f,e,d,c,b,a;
output none_on,out2,out1,out0; //端口聲明
wire [3:0] outvec; //向量聲明
assign {none_on,out2,out1,out0} = outvec; //與上例的編碼方式一致
always @( a or b or c or d or e or f or g or h) begin
if(h) outvec=4'b0111; //使用if_else語(yǔ)句實(shí)現向量賦值
else if(g) outvec=4'b0110; //共9個(gè)分支,其中向量的低3位有8種編碼方式
else if(f) outvec=4'b0101;
else if(e) outvec=4'b0100;
else if(d) outvec=4'b0011;
else if(c) outvec=4'b0010;
else if(b) outvec=4'b0001;
else if(a) outvec=4'b0000;
else outvec=4'b1000;
end
endmodule

例4.12:多路器的設計實(shí)例。


使用assign賦值語(yǔ)句、case語(yǔ)句或if-else語(yǔ)句可以生成多路器電路。如果條件語(yǔ)句(case或if-else)中分支條件是互斥的話(huà),綜合器能自動(dòng)地生成并行的多路器。
多路器設計方案一。

modul emux1(out,a,b,sel); //模塊聲明
output out;
input a,b,sel; //端口聲明
//使用assign語(yǔ)句檢查輸入信號sel的值
assign out = sel ? a : b; //當sel為1時(shí),out為a;否則為b
endmodule

多路器設計方案二。

module mux2( out,a,b,sel); //模塊聲明
output out;
input a,b,sel; //端口聲明
reg out;
always @(a or b or sel) begin //用電平觸發(fā)的always塊來(lái)設計多路器的組合
case( sel ) //使用case語(yǔ)句檢查輸入信號sel的值
1'b1: out = a; //如果為1,輸出out為a
1'b0: out = b; //如果為0,輸出out為b
default: out = 'bx; //默認狀態(tài)
endcase
end
endmodule

多路器設計方案三。

module mux3( out,a,b sel); //模塊聲明
output out;
input a, b, sel; //端口聲明
reg out;
always @( a or b or sel ) begin
if( sel ) //使用if_else語(yǔ)句檢查輸入信號sel的值
out = a; //如果為1,輸出out為a
else
out = b; //如果為0,輸出out為b
end
endmodule

例4.13:奇偶校驗位生成器設計實(shí)例。

module parity( even_numbits,odd_numbits,input_bus); //模塊聲明
output even_numbits, odd_numbits;
input [7:0] input_bus; //端口聲明
assign odd_numbits = ^input_bus; //當input_bus中1的個(gè)數為奇數時(shí),輸出為1
assign even_numbits = ~odd_numbits; //此時(shí)輸出even_numbits為0
endmodule

例4.14:三態(tài)輸出驅動(dòng)器設計實(shí)例(用連續賦值語(yǔ)句建立三態(tài)門(mén)模型)。
三態(tài)輸出驅動(dòng)器設計方案一。

module trist1( out,in,enable); //模塊聲明
output out;
input in, enable; //端口聲明
assign out = enable? in: 'bz; //使用assign語(yǔ)句判斷enable的值
endmodule

三態(tài)輸出驅動(dòng)器設計方案二。

module trist2( out,in,enable ); //模塊聲明
output out;
input in,enable; //端口聲明
bufif1 mybuf1(out, in, enable); //bufif1是一個(gè) Verilog門(mén)級原語(yǔ)(primitive)
//通過(guò)實(shí)例化該原語(yǔ),實(shí)現三態(tài)門(mén)的調用
endmodule

例4.15:三態(tài)雙向驅動(dòng)器設計實(shí)例。

module bidir(tri_inout,out,in,en,b); //模塊聲明
inout tri_inout;
output out;
input in,en,b; //端口聲明
assign tri_inout = en? in : 'bz; //三態(tài)門(mén)的輸入為in
assign out = tri_inout ^ b; //三態(tài)門(mén)的輸出為b
endmodule


2.時(shí)序電路設計實(shí)例
例4.16:觸發(fā)器設計實(shí)例。

module dff( q,data,clk); //模塊聲明
output q;
input data,clk; //端口聲明
reg q;
always @( posedge clk ) begin //邊緣檢測
q = data; //通過(guò)always語(yǔ)句,實(shí)現觸發(fā)器
end
endmodule

例4.17:電平敏感型鎖存器設計實(shí)例一(assign語(yǔ)句)。

module latch1( q,data,clk); //模塊聲明
output q;
input data,clk; //端口聲明
assign q = clk ? data : q; //通過(guò)assign語(yǔ)句,實(shí)現的是一個(gè)鎖存器
endmodule

例4.18:帶置位和復位端的電平敏感型鎖存器設計實(shí)例二(assign語(yǔ)句)。

module latch2( q,data,clk,set,reset); //模塊聲明
output q;
input data,clk,set,reset; //端口聲明
assign q= reset ? 0 : ( set? 1:(clk? data : q ) );
//通過(guò)assign語(yǔ)句,實(shí)現的是一個(gè)鎖存器
//其中,set為置位端,reset為復位端
//在clk為高電平時(shí),鎖存data,否則保持q值
endmodule

例4.19:電平敏感型鎖存器設計實(shí)例三(always塊)。

module latch3( q, data, clk); //模塊聲明
output q;
input data,clk; //端口聲明
reg q;
always @(clk or data) begin //電平檢測
if(clk) //clk為高電平時(shí),q鎖存data值
q = data;
end
endmodule

注意 有的綜合器會(huì )產(chǎn)生一個(gè)警告信息,提示將產(chǎn)生了一個(gè)電平敏感型鎖存器。因為此例中設計的就是一個(gè)電平敏感型鎖存器,所以這個(gè)警告信息是沒(méi)有問(wèn)題的。

例4.20:移位寄存器設計實(shí)例。

module shifter( din,clk,clr,dout); //模塊聲明
input din,clk,clr;
output [7:0] dout; //端口聲明
reg [7:0] dout;
always @(posedge clk) begin
if(clr) //清零
dout = 8'b0;
else begin
dout = dout1; //左移一位
dout[0] = din; //把輸入信號放入寄存器的最低位
end
end
endmodule


例4.21:8位計數器設計實(shí)例一。

module counter1( out, cout, data, load, cin, clk); //模塊聲明
output [7:0] out;
output cout;
input [7:0] data;
input load, cin, clk; //端口聲明
reg [7:0] out;
always @(posedge clk) begin //邊緣檢測
if( load ) //加載信號檢測
out = data;
else
out = out + cin;
end
assign cout= out cin; //只有當out[7:0]的所有各位都為1
//并且進(jìn)位cin也為1時(shí)才能產(chǎn)生進(jìn)位cout
endmodule

例4.22:8位計數器設計實(shí)例二。

module counter2( out, cout, data, load, cin, clk); //模塊聲明
output [7:0] out;
output cout;
input [7:0] data;
input load, cin, clk; //端口聲明
reg [7:0] out;
reg cout;
reg [7:0] preout; //寄存器聲明
always @(posedge clk) begin //邊緣檢測
out = preout; //觸發(fā)器
end
//計算計數器和進(jìn)位的下一個(gè)狀態(tài),為提高性能,load不應影響進(jìn)位
always @( out or data or load or cin ) begin
{cout, preout} = out + cin; //進(jìn)位操作
if(load) preout = data; //判斷加載信號
end
endmodule


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: VHDL 進(jìn)階 代碼設計 邏輯

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>