logo资料库

八位有符号加法器.docx

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
module homework_1( clk,rst_n,a,b,sum ); input clk; input rst_n; input[7:0] a; input[7:0] b; output reg[8:0] sum; always@(posedge clk or negedge rst_n) if(!rst_n)begin sum <= 9'b0; end else begin sum <= {a[7],a} + {b[7],b}; end endmodule /* 犯的错误 if(a[7] == 0 && b[7] == 0)begin sum <= {1'b0,{1'b0,a[6:0]} + {1'b0,b[6:0]}}; end if(a[7] == 1 && b[7] == 1)begin sum <= {1'b1,{1'b0,a[6:0]} + {1'b0,b[6:0]}}; end if(a[7] == 1 && b[7] == 0)begin if(a[6:0] > b[6:0]) sum <= {1'b0,~{{1'b0,a[6:0]} + {1'b0,b[6:0]}} + 1}; else sum <= {0'b0,{1'b0,b[6:0]} + {1'b0,~a[6:0]+1}}; end if(a[7] == 0 && b[7] == 1)begin if(a[6:0] > b[6:0]) else sum <= {0'b0,{1'b0,a[6:0]} + {1'b0,~b[6:0]+1}}; sum <= {1'b0,{1'b0,~b[6:0]+1} + {1'b0,a[6:0]}}; end 其实直接扩张一个符号位就行 */ module tb_homework_1;
reg clk; reg rst_n; reg[7:0]a; reg[7:0]b; wire[8:0]sum; homework_1 t1( .clk(clk), .rst_n(rst_n), .a(a), .b(b), .sum(sum) ); initial clk = 1; always #(`clock_period/2) clk = ~clk; initial begin rst_n = 1'b0; #(`clock_period * 20); rst_n = 1'b1; repeat(20) #(`clock_period * 20)begin a = $random; b = $random; end $stop; end endmodule
分享到:
收藏