题意整理
题目要求求解两个无符号数的差值,也就是将较大值减去较小值,首先需要比较输入数值的大小关系,然后选择不同的操作。对于输入数值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