Xilinx VIvado学习-01 数值处理知加法器

Verilog 数值处理,在处理加法的时候,需要注意溢出问题。

实例:a+b=c

 1 `timescale 1ns / 1ps
 2 //////////////////////////////////////////////////////////////////////////////////
 3 // Company: 
 4 // Engineer: 
 5 // 
 6 // Create Date: 2023/10/17 23:10:15
 7 // Design Name: // Module Name: add
 8 // Project Name: 
 9 // Target Devices: 
10 // Tool Versions: 
11 // Description: 
12 // 
13 // Dependencies: 
14 // 
15 // Revision:
16 // Revision 0.01 - File Created
17 // Additional Comments:
18 // 
19 //////////////////////////////////////////////////////////////////////////////////
20 
21 
22 module add(
23 input signed [7:0] a,
24 input signed [7:0] b,
25 output [7:0]  sum,
26 output carry
27     );
28    assign {carry,sum}=a+b;
29 endmodule

 

仿真代码:

 1 `timescale 1ns / 1ps
 2 //////////////////////////////////////////////////////////////////////////////////
 3 // Company: 
 4 // Engineer: 
 5 // 
 6 // Create Date: 2023/10/17 23:14:25
 7 // Design Name: 
 8 // Module Name: add_sim
 9 // Project Name: 
10 // Target Devices: 
11 // Tool Versions: 
12 // Description: 
13 // 
14 // Dependencies: 
15 // 
16 // Revision:
17 // Revision 0.01 - File Created
18 // Additional Comments:
19 // 
20 //////////////////////////////////////////////////////////////////////////////////
21 
22 
23 module add_sim;
24 reg           sys_clk; 
25 reg           signed [7:0] a; 
26 reg           signed [7:0] b; 
27 wire           signed [8:0] c; 
28 wire   [7:0] sum;
29 wire   carry;
30 initial  sys_clk =1;   
31 always #1 sys_clk = ~sys_clk;
32 //a = 8'h7f;
33 //b = 8'h2;
34 
35 add u_add(
36 .a (a),
37 .b (b),
38 .sum (sum),
39 .carry(carry)
40 );
41 initial begin
42 a=0;b=0;
43 #2
44 a=49;b=73;
45 
46 #2
47 a=116;b=108;
48 #2
49 a=61;b=-108;
50 #2
51 a=-63;b=-125;
52 end
53 assign c = {carry,sum};
54 endmodule 

 

Vivado仿真结果如下:

 两个N位有符号数相加 ,和用N+1位有符号数表示时,与实际结果相符。

 

posted @ 2023-10-13 23:54  古月照今尘  阅读(68)  评论(0编辑  收藏  举报