首页 > 试题广场 >

使用子模块实现三输入数的大小比较

[编程题]使用子模块实现三输入数的大小比较
  • 热度指数:95570 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解


在数字芯片设计中,通常把完成特定功能且相对独立的代码编写成子模块,在需要的时候再在主模块中例化使用,以提高代码的可复用性和设计的层次性,方便后续的修改。

请编写一个子模块,将输入两个8bit位宽的变量data_a,data_b,并输出data_a,data_b之中较小的数。并在主模块中例化,实现输出三个8bit输入信号的最小值的功能。

子模块的信号接口图如下:


主模块的信号接口图如下:


使用Verilog HDL实现以上功能并编写testbench验证。



输入描述:
clk:系统时钟
rst_n:异步复位信号,低电平有效
a,b,c:8bit位宽的无符号数


输出描述:
d:8bit位宽的无符号数,表示a,b,c中的最小值
头像 牛客阿芙
发表于 2022-03-03 19:58:54
精华题解 题意整理 题目要求编写子模块实现两个输入数的大小比较并输出较小值,可以使用if-else语句实现。同时要求在主模块中实现三个输入数值的大小比较,假设三个输入变量为a,b,c。则可以先比较得到a,b中的较小值m,再得到b,c之中的较小值n。最后比较m,n的大小,输入较小值,即可得到a,b,c的最 展开全文
头像 吉大秦少游
发表于 2022-03-19 17:10:48
易错总结:这里很多习惯于软件思维的人写代码会只例化2次子模块,是将a,b比较之后的结果min_ab与c进行比较,进而得到min_abc。 但是这样是错误的,因为当min_ab与c比较时,是上一时刻a,b的最小值与此时c的值比较,也就是拍数上是差一拍的,因此做不到比较同一拍下的a,b,c。 理解HDL 展开全文
头像 Leonico
发表于 2022-03-25 17:19:50
目录 代码 简析 代码 本次代码使用了三个比较器完成。此外,还有一种解法放在了简析中。 sub_mod0:比较器0,a和b比较得到较小的值tmp0; sub_mod1:比较器1,a和c比较得到较小的值tmp1; sub_mod2:比较器2,tmp0和tmp1比较得到最小的值d。 `timesc 展开全文
头像 FPGA探索者
发表于 2022-04-20 20:47:50
module的使用和例化,这个题的问题主要集中在为什么使用2个子模块不对,用3个才对。 实际上,对于组合逻辑实现的子模块,可以用2个,但是要打两拍才和给的波形一致。 对于时序逻辑实现的子模块,更值得大家仔细思考一下波形时序,2个确实不对,发生了比较错位,下面将详细说明。 1.&nb 展开全文
头像 我爱做硬件
发表于 2022-08-31 16:06:22
这个题是第一道分子模块的题目: 子模块有四个输入: 1、时钟信号clk 2、复位信号rst_n 3、8位数据a 4、8位数据b 一个输出: 8位数据c 子模块要完成的任务是两个数比大小,这几乎没有难度,也没什么好说的,直接把代码放出来: modul 展开全文
头像 兄台来瓶哇哈哈
发表于 2022-03-09 19:28:25
其实调用两次子模块应该就可以了,但是会报错,可能是测试用例的问题吧,改成三次就好了,代码如下: `timescale 1ns/1ns module child_mod( input         展开全文
头像 申低压锅
发表于 2022-05-03 22:48:52
`timescale 1ns/1ns module main_mod( input clk, input rst_n, input [7:0]a, input [7:0]b, input [7:0]c, output [7:0]d ); wire [7:0] m,n 展开全文
头像 小旅行者
发表于 2022-05-12 10:15:27
//通过延时输入信号C一个时钟周期,通过两个子模块例化实现对三个输入无符号数的大小比较。 module main_mod(   input clk, input rst_n, input [7:0]a, input [7:0 展开全文
头像 WW在搜寻
发表于 2022-06-15 16:26:41
`timescale 1ns/1ns module main_mod(     input clk,     input rst_n,     input [7:0]a, &nbs 展开全文
头像 菜鸟要飞翔
发表于 2023-04-24 15:59:29
`timescale 1ns/1ns module main_mod( input clk, input rst_n, input [7:0]a, input [7:0]b, input [7:0]c, output [7:0]d ); wire [7:0] u,v; test u 展开全文
头像 不写代码睡不着
发表于 2022-03-10 12:15:17
`timescale 1ns/1ns module main_mod( input clk, input rst_n, input [7:0]a, input [7:0]b, input [7:0]c, output [7:0]d ); wire [7:0] m,n; //***比较a和b 展开全文

问题信息

难度:
42条回答 1020浏览

热门推荐

通过挑战的用户

查看代码
使用子模块实现三输入数的大小比较