verilog典型電路設(shè)計(jì)之流水線(xiàn)結(jié)構(gòu)
下圖是一個(gè)4位的乘法器結(jié)構(gòu),用verilog HDL 設(shè)計(jì)一個(gè)兩級(jí)流水線(xiàn)加法器樹(shù)4位乘法器
對(duì)于流水線(xiàn)結(jié)構(gòu) 其實(shí)需要做的是在每級(jí)之間增加一個(gè)暫存的數(shù)據(jù)用來(lái)存儲(chǔ) 我們得到的東西 我們一般來(lái)說(shuō)會(huì)通過(guò)在每一級(jí)之間插入D觸發(fā)器來(lái)保證數(shù)據(jù)的聯(lián)通
通過(guò)在第一級(jí)和第二級(jí),第二級(jí)和第三級(jí)加法器之間插入D觸發(fā)器組,可以實(shí)現(xiàn)兩級(jí)流水設(shè)計(jì)。
reg類(lèi)型其實(shí)是用在always塊中所以我們?cè)谄渲幸隺lways塊 來(lái)保證reg 的使用
下面是兩級(jí) 流水線(xiàn)的簡(jiǎn)單代碼文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-658678.html
module mul_addtree_2_stage(clk,clr,mul_a,mul_b,mul_out);input clk,clr;
input [3:0] mul_a,mul_b;
output [7:0] mul_out;
reg[7:0] add_tmp_1,add_tmp_2,mul_out;
wire [7:0] stored0,stored1,stored2,stored3;
assign
stored3=mul_b[3]?{1'b0,mul_a,3'b0}:8'b0;
assign
stored2=mul_b[2]?{2'b0,mul_a,2'b0}:8'b0;
assign stored1=mul_b[1]?{3'b0,mul_a,1'b0}:8'b0;
assign stored0=mul_b[0]?{4'b0,mul_a}:8'b0;
always@(posedge clk or negedge clr)
if(!clr) begin
add_tmp_1<=8'b0000_0000;
add_tmp_2<=8'b0000_0000;
mul_out<=8'b0000_0000;
end
else begin
add_tmp_1<=stored3+stored2;
add_tmp_2<=stored1+stored0;
mul_out<=add_tmp_1+add_tmp_2;
end
end
endmodule
下面是流水線(xiàn)結(jié)構(gòu)的testbench文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-658678.html
module mult addtree_2_stag_tb;
reg clk, clr;
reg [3:0]mult_a, mult b;
wire [7:0]mult_out;
mul_addtree_2_stage
U1(.mul_a(mult_a),..mul_b(mult_b),
.mul_out(mult_out),.clk(clk),.clr(clr));
initial
begin
clk=0; clr=0; mult_a=1; mult_b=1;
#5 clr=1;
end
always #10 clk=~clk;
initial
begin
repeat(5)
begin
#20 mult_a=mult_a+1; mult_b=mult_b+1;
end
end
endmodule
到了這里,關(guān)于【【verilog典型電路設(shè)計(jì)之流水線(xiàn)結(jié)構(gòu)】】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!