基於Verilog的陣列乘法器設計
陣列乘法器設計
參照計算機組成與系統結構這本書84頁的一個框圖,相關解析可以參照這本書,下面提供自己根據框圖寫的程式碼,其實也很簡單,照圖施工的過程。
//全加器模組程式碼
module full_adder(
input a0,
input b0,
input c0,
output s1,
output c1
);
assign c1 = a0 & b0 | c0 & (a0 ^ b0);
assign s1 = c0 ^ a0 ^ b0;
endmodule
//乘法器子模組程式碼
module multiple_part(X,Y,pro,c0,c1,s1);
input X;
input Y;
input pro;
input c0;
output c1;
output s1;
wire xy;
full_adder full_adder(
.a0(xy),
.b0(pro),
.c0(c0),
.s1(s1),
.c1(c1)
);
assign xy = X & Y;
endmodule
//頂層模組
module mutiple_top(
input wire[0:3] x,
input wire [0:3] y,
output wire [7:0] P
);
wire c3_4;
wire c0_1;
wire c1_2;
wire c2_3;
wire s1_7;
wire s2_6;
wire s3_5;
wire c7_6;
wire c6_5;
wire s6_8;
wire c5_4;
wire s5_9;
wire c8_9;
wire s9_15;
wire s4_10;
wire c10_11;
wire s10_14;
wire c4_11;
wire s11_13;
wire c14_13;
wire c13_12;
wire c9_10;
wire c11_12;
wire c15_14;
multiple_part multiple_part0(
.X(x[3]),
.Y(y[3]),
.pro(0),
.c0(0),
.c1(c0_1),
.s1(P[0])
);
multiple_part multiple_part1(
.X(x[2]),
.Y(y[3]),
.pro(0),
.c0(c0_1),
.c1(c1_2),
.s1(s1_7)
);
multiple_part multiple_part2(
.X(x[1]),
.Y(y[3]),
.pro(0),
.c0(c1_2),
.c1(c2_3),
.s1(s2_6)
);
multiple_part multiple_part3(
.X(x[0]),
.Y(y[3]),
.pro(0),
.c0(c2_3),
.c1(c3_4),
.s1(s3_5)
);
multiple_part multiple_part4(
.X(x[0]),
.Y(y[2]),
.pro(c3_4),
.c0(c5_4),
.c1(c4_11),
.s1(s4_10)
);
multiple_part multiple_part5(
.X(x[1]),
.Y(y[2]),
.pro(s3_5),
.c0(c6_5),
.c1(c5_4),
.s1(s5_9)
);
multiple_part multiple_part6(
.X(x[2]),
.Y(y[2]),
.pro(s2_6),
.c0(c7_6),
.c1(c6_5),
.s1(s6_8)
);
multiple_part multiple_part7(
.X(x[3]),
.Y(y[2]),
.pro(s1_7),
.c0(0),
.c1(c7_6),
.s1(P[1])
);
multiple_part multiple_part8(
.X(x[3]),
.Y(y[1]),
.pro(s6_8),
.c0(0),
.c1(c8_9),
.s1(P[2])
);
multiple_part multiple_part9(
.X(x[2]),
.Y(y[1]),
.pro(s5_9),
.c0(c8_9),
.c1(c9_10),
.s1(s9_15)
);
multiple_part multiple_part10(
.X(x[1]),
.Y(y[1]),
.pro(s4_10),
.c0(c9_10),
.c1(c10_11),
.s1(s10_14)
);
multiple_part multiple_part11(
.X(x[0]),
.Y(y[1]),
.pro(c4_11),
.c0(c10_11),
.c1(c11_12),
.s1(s11_13)
);
multiple_part multiple_part12(
.X(x[0]),
.Y(y[0]),
.pro(c11_12),
.c0(c13_12),
.c1(P[7]),
.s1(P[6])
);
multiple_part multiple_part13(
.X(x[1]),
.Y(y[0]),
.pro(s11_13),
.c0(c14_13),
.c1(c13_12),
.s1(P[5])
);
multiple_part multiple_part14(
.X(x[2]),
.Y(y[0]),
.pro(s10_14),
.c0(c15_14),
.c1(c14_13),
.s1(P[4])
);
multiple_part multiple_part15(
.X(x[3]),
.Y(y[0]),
.pro(s9_15),
.c0(0),
.c1(c15_14),
.s1(P[3])
);
endmodule
//測試模組程式碼
`timescale 1ns/1ns
module mutiple_top_tb;
reg [3:0] x;
reg [3:0] y;
wire [7:0] P;
integer i ,j;
mutiple_top mutiple_top(
.x(x),
.y(y),
.P(P)
);
initial begin
x = 4'd0;
y = 4'd0;
#5;
for (i = 0; i < 16; i = i + 1)begin
for (j = 0 ; j < 16; j = j + 1) begin
y = y + 1;
#5;
end
x = x + 1;
#5;
end
$stop;
end
endmodule
``
模擬波形圖
由波形圖可以看出,x乘以y的結果是等於p的,可知模擬正確。
相關文章
- 數字IC設計 FPGA——再談乘法器設計(使用Verilog 原語 LUT 進行四位乘法器設計)FPGA
- 基於FPGA的乘法器原理介紹及設計實現FPGA
- Verilog例項陣列陣列
- 看圖理解基於陣列的佇列陣列佇列
- 基於promise的阻塞式佇列設計Promise佇列
- 基於字元陣列s[]的s,&s字元陣列
- 【黑馬程式設計師濟南中心】java基礎-陣列程式設計師Java陣列
- verilog實現基於Cordic演算法的雙曲函式計算演算法函式
- ARM彙編和C語言混合程式設計中陣列的陣列的操作C語言程式設計陣列
- 林大媽的JavaScript基礎知識(三):JavaScript程式設計(4)陣列JavaScript程式設計陣列
- 用verilog/systemverilog 設計fifo (2)
- 用verilog/systemverilog 設計fifo (1)
- 【CST】貼片天線陣列設計陣列
- c程式設計--指標與陣列C程式程式設計指標陣列
- numpy——陣列的計算陣列
- 關於在類陣列中使用陣列方法陣列
- vue陣列操作遇到坑-關於陣列操作Vue陣列
- 基於陣列的學生管理系統【C語言版】陣列C語言
- 前端中的簡單程式設計題-陣列(2)前端程式設計陣列
- 陣列基礎使用陣列
- 基於BIT陣列實現全域性功能開關陣列
- 基於shiro RBAC的表設計
- 基於 esbuild 的 universal bundler 設計UI
- 基於原型的角色設計方法原型
- 剖析JS和Redis的資料結構設計:陣列JSRedis資料結構陣列
- Verilog設計技巧例項及實現
- 關於陣列去重陣列
- XCZU19EG板卡設計資料:610-基於6U VPX 的FPGA XCZU19EG儲存陣列FPGA陣列
- JavaScript基礎(五)陣列JavaScript陣列
- JavaScript基礎——使用陣列JavaScript陣列
- 樹狀陣列基礎陣列
- golang基礎之陣列Golang陣列
- 基於UDP程式設計UDP程式設計
- vue 關於陣列和物件的更新Vue陣列物件
- LeetCode 關於陣列的相對排序LeetCode陣列排序
- 3229. 使陣列等於目標陣列所需的最少操作次數陣列
- C語言入門基礎之陣列——數學和程式設計的完美結合(圖)C語言陣列程式設計
- 基於MATLAB的水果分級設計Matlab