Verilog 基础语法(题目)

Verilog 基础语法(题目)

**本内容来自 牛客网Verilog基础语法**

1、四选一多路器

制作一个四选一的多路选择器,要求输出定义上为线网类型
状态转换:
d0 11
d1 10
d2 01
d3 00
信号示意图:
在这里插入图片描述
波形示意图:
在这里插入图片描述
输入描述:
输入信号 d1,d2,d3,d4 sel
类型 wire

输出描述:
输出信号 mux_out
类型 wire

module mux4_1(input [1:0]d1,d2,d3,d0,input [1:0]sel,output[1:0]mux_out);//*************code***********//reg [1:0] mux_out_tmp;always@(*) begincase(sel)2'b00:  mux_out_tmp = d3;2'b01:  mux_out_tmp = d2;2'b10:  mux_out_tmp = d1;2'd11:  mux_out_tmp = d0;default:    mux_out_tmp = d3;endcaseendassign mux_out = mux_out_tmp;//*************code***********//
endmodule

2、异步复位的串联T触发器

用verilog实现两个串联的异步复位的T触发器的逻辑,结构如图:
信号示意图:
在这里插入图片描述
波形示意图:
在这里插入图片描述
输入描述:
输入信号 data, clk, rst
类型 wire
在testbench中,clk为周期5ns的时钟,rst为低电平复位

输出描述:
输出信号 q
类型 reg

module Tff_2 (input wire data, clk, rst,output reg q  
);//*************code***********//// 做题之前首先需要知道T触发器的特点:输入为1时,输出进行翻转。// 另外需要注意异步复位reg tmp;always@(posedge clk or negedge rst) beginif(~rst)tmp <= 0;else if(data)tmp <= ~tmp;elsetmp <= tmp;endalways@(posedge clk or negedge rst) beginif(~rst)q <= 0;else if(tmp)q <= ~q;elseq <= q;end//*************code***********//
endmodule

3、奇偶校验

现在需要对输入的32位数据进行奇偶校验,根据sel输出校验结果(1输出奇校验,0输出偶校验)
信号示意图:
在这里插入图片描述
波形示意图:
在这里插入图片描述
输入描述:
输入:bus、sel
类型:wire

输出描述:
输出信号:check
类型:wire

module odd_sel(input [31:0] bus,input sel,output check
);
//*************code***********//
// 奇偶校验根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。
// 采用奇数的称为奇校验,反之,称为偶校验。
// bus=0,二进制数 0000,偶数个1 按位异或为0;
// bus=2,二进制数 0010,奇数个1 按位异或为1;
// bus=3,二进制数 0011,偶数个1 按位异或为0;
// bus=8,二进制数 1000,奇数个1 按位异或为1;// 在Verilog中,^运算符作为单目运算符时的功能是"按位异或",作为双目运算符时的功能是"异或"。
// 当data_in是一个4 bit,的数据时,^data_in = data_in[0] ^ data_in[1] ^ data_in[2] ^ data_in[3],简言之,就是^bus,
// 就是检查bus中1的个数是否是成对的,如果成队,那就是为0,也就是偶校验,所以奇校验刚好取反assign check = sel ? ^bus : !(^bus);
//*************code***********//
endmodule

4、移位运算与乘法

已知d为一个8位数,请在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号通知此时刻输入的d有效(d给出信号的上升沿表示写入有效)
信号示意图:
在这里插入图片描述
波形示意图:
在这里插入图片描述
输入描述:
输入信号:d、clk、rst
类型:wire
在testbench中,clk为周期5ns的时钟,rst为低电平复位

输出描述:
输出信号:input_grant、out
类型:reg

分析:
题意整理:

  1. 在硬件中进行乘除法运算是比较消耗资源的一种方法,想要在不影响延迟并尽量减少资源消耗,必须从硬件的特点上进行设计。
  2. 根据寄存器的原理,由于是二进制,所以进位和退位为x2或者/2,同样除7可以使用进位3然后减去本身的做法,这样就将乘除法运算转化为位运算,这是一种比较简单的整数运算处理。
  3. 需要给出一个计数器的状态机,注意d输入不是随时有效的,只有在cnt计数为0的那个时钟沿,d输入有效,因此需要设计一个寄存器din,在cnt为0时候锁存d的值

解体主体:
根据题意分析,可以得到状态转换:
设输入为d,计数器为cnt
移位运算逻辑:

乘数位运算
1d
3(din<<2)-din
7(din<<3)-din
8(din<<3)

状态机逻辑:

cntoutinput_grant
0直接输出d,并寄存d的值为din1
1(din<<2)-din0
2(din<<3)-din0
3(din<<3)0
将电路转换成Verilog代码描述如下:
module multi_sel(input [7:0]d,input clk,input rst,output reg input_grant,output reg [10:0]out
);
//*************code***********//reg [1:0] cnt;reg [7:0] din;always @(posedge clk or negedge rst) beginif(!rst) begincnt <= 0;out <= 0;input_grant <= 0;din <= 0;endelse begincnt <= cnt + 1;case (cnt)0:  begindin <= d;input_grant <= 1;out <= d;end1:  begininput_grant <= 0;out <= (din<<2)-din;end2:  begininput_grant <= 0;out <= (din<<3)-din;end3:  begininput_grant <= 0;out <= (din<<3);endendcaseendend
//*************code***********//
endmodule

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人制作开源方案 | 桌面级机械臂--本体说明+驱动及控制

一、本体说明 1. 机械臂整体描述 该桌面级机械臂为模块化设计&#xff0c;包含主机模块1个、转台模块1个、二级摆动模块1个、可编程示教盒1个、2种末端执行器、高清摄像头&#xff0c;以及适配器、组装工具、备用零件等。可将模块快速组合为一个带被动关节的串联3自由度机械臂…

贪心算法:简单而高效的优化策略

在计算机科学中&#xff0c;贪心算法是一种简单而高效的优化策略&#xff0c;用于解决许多组合优化问题。虽然它并不适用于所有问题&#xff0c;但在一些特定情况下&#xff0c;贪心算法能够产生近似最优解&#xff0c;而且计算成本较低。在本文中&#xff0c;我们将深入探讨贪…

【Java架构-包管理工具】-Maven基础(一)

本文摘要 Maven作为Java后端使用频率非常高的一款依赖管理工具&#xff0c;在此咱们由浅入深&#xff0c;分三篇文章&#xff08;Maven基础、Maven进阶、私服搭建&#xff09;来深入学习Maven&#xff0c;此篇为开篇主要介绍Maven概念、模型、安装配置、基本命令 文章目录 本文…

扩散模型实战(五):采样过程

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型实战&#xff08;二&#xff09;&#xff1a;扩散模型的发展 ​扩散模型实战&#xff08;三&#xff09;&#xff1a;扩散模型的应用 扩散模型实战&#xff08;四&#…

2.含电热联合系统的微电网运行优化

含电热联合系统的微电网运行优化 MATLAB代码&#xff1a;含电热联合系统的微电网运行优化 关键词&#xff1a;微网 电热联合系统 优化调度 参考文档&#xff1a;《含电热联合系统的微电网运行优化》完全复现 仿真平台&#xff1a;MATLAB yalmipcplex [火]主要内容&#xf…

微服务引擎 MSE 全新升级,15 分钟快速体验微服务全栈能力

作者&#xff1a;草谷 前言 微服务引擎 MSE 全新发布&#xff01;新版本带来了一系列令人振奋的特性和改进&#xff0c;让您更轻松、高效地构建和管理微服务应用程序。从快速入门到迁移优化&#xff0c;MSE 为开发人员提供了全方位的支持和解决方案。无论您是刚刚接触微服务还…

Python标准库概览

Python标准库概览 知识点 标准库: turtle库(必选)标准库: random库(必选)、time库(可选&#xff09; 知识导图 1、turtle库概述 turtle&#xff08;海龟&#xff09;是Python重要的标准库之一&#xff0c;它能够进行基本的图形绘制。turtle库绘制图形有一个基本框架&#x…

【JavaEE】Spring全家桶实现AOP-统一处理

【JavaEE】AOP&#xff08;2&#xff09; 文章目录 【JavaEE】AOP&#xff08;2&#xff09;1. 统一登录校验处理1.1 自定义拦截器1.2 将自定义拦截器加入到系统配置1.3 测试1.4 对于静态资源的处理1.5 小练习&#xff1a;统一登录拦截处理1.6 拦截器原理1.6.1 执行流程1.6.2 源…

第60步 深度学习图像识别:误判病例分析(Pytorch)

基于WIN10的64位系统演示 一、写在前面 上期内容基于Tensorflow环境做了误判病例分析&#xff08;传送门&#xff09;&#xff0c;考虑到不少模型在Tensorflow环境没有迁移学习的预训练模型&#xff0c;因此有必要在Pytorch环境也搞搞误判病例分析。 本期以SqueezeNet模型为…

Zenity 简介

什么使 Zenity Zenity 是一个开源的命令行工具&#xff0c;它提供了一种简单的方式来创建图形化的用户界面&#xff08;GUI&#xff09;对话框&#xff0c;以与用户进行交互。它基于 GTK 库&#xff0c;可以在 Linux 和其他 UNIX-like 系统上使用。 Zenity 可以通过命令行或脚…

Linux之基础IO文件系统讲解

基础IO文件系统讲解 回顾C语言读写文件读文件操作写文件操作输出信息到显示器的方法stdin & stdout & stderr总结 系统文件IOIO接口介绍文件描述符fd文件描述符的分配规则C标准库文件操作函数简易模拟实现重定向dup2 系统调用在minishell中添加重定向功能 FILE文件系统…

https 的ssl证书过期处理解决方案(lighthttpd)

更换证书&#xff1a;lighthttpd 配置文件位置&#xff1a;/opt/vmware/etc/lighttpd/lighttpd.conf &#xff08;配置文件的最底部 G快速来到底部&#xff09; 方案一&#xff1a;阿里云申请免费的证书 这里公司内网环境没有配置域名&#xff0c;可以创建一个临时域名&…