(1)数字前仿技术理论

### 1、verilog跟System verilog区别

2、RTL跟门级建模

for 循环在 Verilog 中绝对属于“行为级建模” (Behavioral Modeling)。

从最顶层的行为级(写算法/验证脚本,只关注输入输出结果),到中间核心的RTL级(寄存器传输级,即你正在写的 assign 和 always,描述数据如何在寄存器间流动),再到最底层的门级/开关级(具体的逻辑门和晶体管,由 EDA 工具自动生成)。作为 CPU 设计者,你的工作重心死锁在 RTL 级,你负责描述“逻辑功能”,底层的“物理实现”交给工具自动完成。

3、MAC8电路设计

8位并行MAC的代码:
mac8_dualmode.v

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
`timescale 1ns/1ps
module mac8_dualmode #(
parameter ACCW = 32
)(
input wire clk,
input wire rst_n,
input wire clr,
input wire mode,
input wire [7:0] a,
input wire [7:0] b,
output reg [15:0] sum_out
);

wire [15:0] prod = a * b;
reg [15:0] prev_prod;
reg [15:0] acc_reg;

always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
prev_prod <= 16'd0;
acc_reg <= 16'd0;
sum_out <= 16'd0;
end
else begin

if (mode == 1'b0) begin
sum_out <= prev_prod + prod;
prev_prod <= prod;
end
else begin
if (clr) begin
acc_reg <= 16'd0;
sum_out <= 16'd0;
end
else begin
acc_reg <= acc_reg + prod;
sum_out <= acc_reg + prod;
end

prev_prod <= prod;
end
end
end

endmodule

testbench:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
`timescale 1ns/1ps
module mac8_dualmode_tb;

reg clk;
reg rst_n;
reg clr;
reg mode;
reg [7:0] a, b;
wire [15:0] sum_out;

mac8_dualmode #(
.ACCW(32)
) dut (
.clk (clk),
.rst_n (rst_n),
.clr (clr),
.mode (mode),
.a (a),
.b (b),
.sum_out (sum_out)
);

initial clk = 0;
always #10 clk = ~clk; // 50 MHz

reg [7:0] a_seq [0:19];
reg [7:0] b_seq [0:19];
integer i;

initial begin
a_seq[0]=2; b_seq[0]=3; // 6
a_seq[1]=4; b_seq[1]=5; // 20
a_seq[2]=6; b_seq[2]=7; // 42
a_seq[3]=8; b_seq[3]=1; // 8
a_seq[4]=15; b_seq[4]=15; // 225
a_seq[5]=0; b_seq[5]=0; // 0
a_seq[6]=5; b_seq[6]=3; // 15
a_seq[7]=2; b_seq[7]=4; // 8
a_seq[8]=7; b_seq[8]=7; // 49
a_seq[9]=1; b_seq[9]=2; // 2
a_seq[10]=3; b_seq[10]=3; // 9
a_seq[11]=4; b_seq[11]=3; // 12
a_seq[12]=8; b_seq[12]=8; // 64
a_seq[13]=6; b_seq[13]=2; // 12
a_seq[14]=9; b_seq[14]=1; // 9
a_seq[15]=3; b_seq[15]=5; // 15
a_seq[16]=0; b_seq[16]=0; // 0
a_seq[17]=15; b_seq[17]=1; // 15
a_seq[18]=7; b_seq[18]=5; // 35
a_seq[19]=12; b_seq[19]=12;// 144
end

endmodule
ESC 关闭 | 导航 | Enter 打开
输入关键词开始搜索