题意整理

题目要求求解两个无符号数的差值,也就是将较大值减去较小值,首先需要比较输入数值的大小关系,然后选择不同的操作。对于输入数值a,b,可能存在两种情况:a>b和a≤b,符合if-else语句的逻辑,可以使用if-else语句完成功能的实现。

题解主题

根据题目的要求,模块的输入端口包括:

       系统时钟和复位信号:clk,rst_n;

        两个8bit输入信号a,b.

输出端口包括:

               输出信号c.

输入信号和输出信号为8比特无符号数,加上系统时钟信号和复位信号,完整的模块端口声明是:

module data_minus(                  //if-else-module

       input clk,

       input rst_n,

       input [7:0]a,

       input [7:0]b,

       output reg [8:0]c

);

       在复位信号有效时,输出置为0,否则根据输入信号的大小关系,对数据做不同的运算。if…else语句的使用格式如下:

       if (判断条件)                      

              begin                          //当判断条件满足时,执行的语句

                     语句1;

                     语句2;

              end

       else begin                           //当判断条件不满足时,执行的语句

                     语句1;

                     语句2;

              end

       判断条件可以是

当执行的代码超过一句,需要使用begin…end包含,如果只有一句,则可以省略begin…end。代码如下:

always @(posedge clk or negedge rst_n)

       if(!rst_n)

              c <= 0;

       else if(a > b)

              c <= a-b;

       else

              c <= b-a;

参考答案

`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)
	if(!rst_n)
		c <= 0;
	else if(a > b)
		c <= a-b;
	else 
		c <= b-a;
	

endmodule