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位有符号数表示时,与实际结果相符。