题解 | #求两个数的差值#
求两个数的差值
https://www.nowcoder.com/practice/de8e9138214647f1826e99043a1b7990
求两个数的差值
依旧采用异步复位,同时复位信号低电平有效。
输入a,b和输出c都是8bits的无符号数。可以直接进行加减运算。
用if...else if ....else if ....来表达就可以。
本题比较简单,所以直接贴代码。
`timescale 1ns/1ns module data_minus( input clk, input rst_n, input [7:0]a, input [7:0]b, output reg [8:0]c ); always @(posedge clk or negedge rst_n) begin if(!rst_n) c <= 0; else if(a>b) c <= a - b; else c <= b -a; end endmodule
为了更好的理解,所以再贴一下testbench的测试代码
`timescale 1ns/1ns module tb(); reg signed [7:0] a,b; //只能对reg型进行赋初值操作 reg clk,rst_n; wire signed [8:0]c; initial begin clk = 0; rst_n = 0; a = 0; b = 0; #20 rst_n = 'b1;a = 'd1;b = 'd9; //对信号赋值 #50 rst_n = 'b1;a = 2'd29;b = 'd9; //对信号赋值 $finish; end always #5 clk = !clk; //产生时钟信号 data_minus dut( .clk(clk), .rst_n(rst_n), .a(a), .b(b), .c(c) ); endmodule仿真的波形图为