Verilog语法学习——LV9_使用子模块实现三输入数的大小比较

news2024/9/27 5:46:47

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

题目来源于牛客网

[牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page=1&tab=Verilog篇&topicId=301)

题目

描述

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

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

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

在这里插入图片描述

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

在这里插入图片描述

输入描述:

clk:系统时钟

rst_n:异步复位信号,低电平有效

a,b,c:8bit位宽的无符号数

输出描述:

d:8bit位宽的无符号数,表示a,b,c中的最小值

编写子模块

在Verilog中,可以使用module关键字编写子模块。子模块是一种将较大的电路拆分为模块化部分的方法,使代码更易于维护和重复使用。

以下是一个简单的示例,展示了如何编写一个加法器子模块:

module Adder(
    input [3:0] A, 
    input [3:0] B, 
    output [4:0] Sum
);
    assign Sum = A + B;
endmodule

通过将子模块实例化到另一个模块中,可以在主模块中使用子模块。

下面是一个示例,展示了如何实例化并使用上述的加法器子模块:

module Top;
    // 输入和输出端口声明
    reg [3:0] A;
    reg [3:0] B;
    wire [4:0] Sum;
    
    // 子模块实例化
    Adder adder_inst(.A(A), .B(B), .Sum(Sum));
    
    // 在这里可以使用子模块的输出Sum
    
    // ...
    
endmodule

代码思路

例化一个模块,该模块比较两个输入的大小,并输出较小的数。

例化两次该模块,实现三个数的比较。

注:

采用时序逻辑例化两次子模块时,第一个例化的最小值经过一个时钟周期才能得到,
此时若再拿去与第三个数比较大小进行第二次例化时,第三个数已经不是上个周期的数了,
解决办法就是将第三个数缓存一个周期,再进行第二次例化子模块,结果可以通过测试。

代码

`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	//由图可知,a,b,c,d全为wire型
	
);
	wire [7:0] min_ab;
    //第一次例化,比较a,b的大小
	compare u_compare(
		.clk(clk),
		.rst_n(rst_n),
		.data_a(a),
		.data_b(b),
		.data_c(min_ab)
	);
/*采用时序逻辑例化两次子模块时,第一个例化的最小值经过一个时钟周期才能得到,
此时若再拿去与第三个数比较大小进行第二次例化时,第三个数已经不是上个周期的数了,
解决办法就是将第三个数缓存一个周期,再进行第二次例化子模块,结果可以通过测试。
*/
    reg [7:0] c_r;	//将c的值存储起来
	always @(posedge clk or negedge rst_n) begin
		if(!rst_n)
			c_r <= 0;
		else 
			c_r <= c;
	end
	 //第二次例化,比较a,b,c的大小
	compare u_compare_2(
		.clk(clk),
		.rst_n(rst_n),
		.data_a(min_ab),
		.data_b(c_r),
		.data_c(d)
	);	
endmodule

//子模块:比较data_a,data_b的大小,并且输出较小的数
module compare(
	input clk,
	input rst_n,
	input [7:0]data_a,
	input [7:0]data_b,
	output [7:0]data_c		
);	
	reg [7:0] result;	//定义一个reg型,将比较结果存起来
	always @(posedge clk or negedge rst_n) begin
		if(!rst_n)
			result <=0;
		else begin
			if(data_a > data_b)
				result <= data_b;
			else if(data_a <= data_b)
				result <= data_a;
		end	
	end
	assign data_c = result;
endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/805434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#之泛型

目录 一、概述 二、C#中的泛型 继续栈的示例 三、泛型类 &#xff08;一&#xff09;声明泛型类 &#xff08;二&#xff09;创建构造类型 &#xff08;三&#xff09;创建变量和实例 &#xff08;四&#xff09;比较泛型和非泛型栈 四、类型参数的约束 &#xff08;一…

系统集成中级计算汇总

基本计算&#xff1a; EV 挣值 (实际完成的工作量) AC 实际发生的花费 PV 计划花费(预算) CV 成本 SV 进度 CV 和 SV 的计算 都是通过EV 减去另一个值 CV EV-AC SV EV-PV 成本 chengben C 开头 所以CV 是成本 CV 中有个C 所以用到的是 AC ,另外一个则是剩余的PV CV SV 计算…

LeetCode621.Task-Scheduler<任务调度器>

题目&#xff1a; 思路&#xff1a; 思路个锤子,看完题根本不会写. 看的答案 : 【任务调度器】C 桶子_配图理解 - 任务调度器 - 力扣&#xff08;LeetCode&#xff09; 是一种贪心的思想.数学问题. 一个是任务的种类,一个是任务的最大的一个值。 代码是&#xff1a; //cod…

【组内工作】木马回联

文章目录 C2服务器安装和运行方法CrossC2运行方法sliver运行方法empire安装方法DeimosC2安装教程TrevorC2安装教程&#xff1a; C2服务器的流量特征CrossC21. 心跳包2. 命令3. ja3/ja3s Sliver1. http2. https empirehttphttps DeimosC2https TrevorC2 C2服务器安装和运行方法 …

【VTK】读取一个 STL 文件,并使用 Qt 显示出来,在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 文章目录 A.hA.cppRef. 直接先把效果放出来&#xff0c;有需要就往下看。 A.h // A.h #pragma once#include <QtWidgets/QMainWindow> #include "…

【Qt】QML-02:QQuickView用法

1、先看demo QtCreator自动生成的工程是使用QQmlApplicationEngine来加载qml文件&#xff0c;下面的demo将使用QQuickView来加载qml文件 #include <QGuiApplication> #include <QtQuick/QQuickView>int main(int argc, char *argv[]) {QGuiApplication app(argc,…

蓝桥杯单片机第八届国赛 真题+代码

iic.c /* # I2C代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行编写相关代码或以该代码为基础&#xff0c;根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求&#xff0c;进行代码调试和修改。 */ #include <STC1…

生态共建丨YashanDB与构力科技完成兼容互认证

近日&#xff0c;深圳计算科学研究院崖山数据库系统YashanDB V22.2与北京构力科技有限公司BIMBase云平台完成兼容性互认证。经严格测试&#xff0c;双方产品完全兼容、运行稳定。 崖山数据库系统YashanDB是深算院自主研发设计的新型数据库系统&#xff0c;融入原创理论&#xf…

新手小白学习SWAT模型【建模方法、实例应用、高级进阶】

目录 第一部分&#xff1a;SWAT模型实践部分 第二部分&#xff1a;SWAT模型【进阶部分】 更多推荐 【专家】&#xff1a;刘老师【副教授】&#xff0c;北京重点高校资深专家&#xff0c;和美国SWAT软件开发方长期合作&#xff0c;拥有丰富的科研及工程技术经验&#xff0c;长…

vue3点击生成二维码

&#x1f642;博主&#xff1a;锅盖哒 &#x1f642;文章核心&#xff1a;vue点击生成二维码 目录大纲 html部分 js部分 css部分 html部分 当点击他的时候触发弹窗 <div class"tuand_Text"><div class"text_OBJ"><div><img src&q…

铁路关基保护新规:优先采购安全可信的网络产品和服务!

《征求意见稿》第十四条提到&#xff1a;运营者应当加强供应链安全保护&#xff0c;优先采购安全可信的网络产品和服务&#xff1b;采购网络产品和服务影响或者可能影响国家安全的&#xff0c;运营者应当预判网络产品和服务投入使用后可能带来的国家安全风险&#xff0c;按照国…

intellij 编辑器内性能提示

介绍 IntelliJ IDEA已经出了最新版的2023.2&#xff0c;最耀眼的功能无法两个 AI Assistant编辑器内性能提示 AI Assistant 已经尝试过了是限定功能&#xff0c;因为是基于open ai,所以限定的意思是国内无法使用&#xff0c;今天我们主要介绍是编辑器内性能提示 IntelliJ Pr…

API调试工具用什么?试试Apipost

前言 Apipost是一款支持 RESTful API、SOAP API、GraphQL API等多种API类型&#xff0c;支持 HTTPS、WebSocket、gRPC多种通信协议的API调试工具。除此之外&#xff0c;Apipost 还提供了自动化测试、团队协作、等多种功能。这些丰富的功能简化了工作流程&#xff0c;提高了研发…

软件测试-基础阶段学习

目录 一、测试介绍 二、测试常用分类 三、模型 四、测试流程 五、测试用例 六、用例设计方法 七、缺陷 八、html 资料获取方法 阶段目标 能独立针对web项目实施功能测试 一、测试介绍 什么是软件测试 使用技术手段验证软件是否满足需求 测试主流技能 功能测试自…

【JAVASE】顺序和选择结构

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 顺序和选择 1. 顺序结构2. 分支结构2.1 …

MySQL的入门使用

在命令提示符内使用MySQL MySQL安装好后&#xff0c;就可以简单的尝试使用它。 打开&#xff1a;命令提示符程序&#xff0c;输入&#xff1a;mysql -uroot -p&#xff0c;然后回车后输入密码&#xff0c;即可进入命令行环境 在MySQL的命令行环境下&#xff0c;可以通过&…

【换根DP】Subtree

Subtree - 洛谷 题意&#xff1a; 思路&#xff1a; Code&#xff1a; #include <bits/stdc.h>#define int long longusing namespace std;const int mxn1e510; const int mxv1e510;vector<int> G[mxn]; int N,P,u,v; int f[mxn],g[mxn],son[mxn],pre[mxn],suf[m…

Acwing.901 滑雪(动态规划)

题目 给定一个R行C列的矩阵&#xff0c;表示一个矩形网格滑雪场。 矩阵中第i行第j列的点表示滑雪场的第i行第j列区域的高度。 一个人从滑雪场中的某个区域内出发&#xff0c;每次可以向上下左右任意一个方向滑动一个单位距离。当然&#xff0c;一个人能够滑动到某相邻区域的前…

CTF PWN-攻防世界Overflow整数溢出漏洞

文章目录 前言整数溢出有符号整数溢出无符号整数回绕截断与宽度溢出 int_overflow题目漏洞分析EXP程序构造 总结 前言 滴水穿石&#xff0c;非一日之功。继续练习攻防世界 PWN 题目&#xff0c;此次练习的题目是 int_overflow&#xff0c;顾名思义是整数溢出类型的漏洞&#x…

小波分解机械信号

function [ output_args ] ex4_2( input_args ) %EXAMPLE4_2 Summary of this function goes here % Detailed explanation goes here clc; clear; load sumsin; s sumsin; % 进行3层小波分解&#xff0c;小波基函数为db3 [c,l] wavedec(s,3,db3); figure(1) subplot(21…