verilog练习——基础语法

news2024/10/5 20:16:48

目录

基础语法

VL1 四选一多路器

VL2 异步复位的串联T触发器

VL3 奇偶校验

VL4 移位运算与乘法

VL5 位拆分与运算

VL6 多功能数据处理器

VL7 求两个数的差值

VL8 使用generate…for语句简化代码

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

VL10 使用函数实现数据大小端转换


基础语法

VL1 四选一多路器

思路1:case语句(4路以上用case更方便)

case(sel)
    2'b00: mux_out = d3;
    2'b01: mux_out = d2;
    2'b10: mux_out = d1;
    2'b11: mux_out = d0;
    default:mux_out = 2'bxx;
endcase

思路2:三目运算符

assign mux_out = (sel==2'd0)?d3:((sel==2'd1)?d2:((sel==2'd2)?d1:(d0)));

VL2 异步复位的串联T触发器

T触发器功能:

        当输入端T=0时,时钟脉冲到达触发器保持原态不变;

        当输入端T=1时,每来一个时钟脉冲触发器的状态翻转一次。

信号示意图:

VL3 奇偶校验

奇偶校验概念:

奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数

1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。

偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数

1000110(1)你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了。  

缺点:1位误码能检测出,2位及2位以上检测不出来,而且不能纠错。

思路:^a操作,可以检测a中的“1”是否为奇数;

           若a=100,^a=1^0^0=1,则1的数量为奇数,

           若a=1100,^a=1^1^0^0=0,则1的数量为偶数。

assign check_ji = ^bus; //每个位相异或,
assign check = (sel == 1) ? check_ji : ~check_ji;

VL4 移位运算与乘法

在硬件中进行乘除运算比较消耗资源,因此我们采用移位操作。

out <= d_reg + {d_reg ,1'b0};     //1+2=3

out <= d_reg + {d_reg,1'b0} + {d_reg,2'b0};     //1+2+4=7

out <= {d_reg,3'b0};      //8*d_reg

vivado仿真图:

VL5 位拆分与运算

注意:

        wire变量只能用于组合逻辑中的assign语句(组合逻辑的always语句中不能用);

        reg型变量用于时序逻辑中的always语句。

        所以要注意看 该题设定好了输出变量类型,意味着要用下图设计方法。 

VL6 多功能数据处理器

         if else即可完成

VL7 求两个数的差值

        if else即可完成,要注意if eles的赋值语句超过1个,就要加begin...end

VL8 使用generate…for语句简化代码

1、作用:generate…for是用于简化代码,

2、generate…for和for循环的区别:

        generate-for只针对于module、regnet、assign、always、parameter、function.initial.task等语匀或煮模块,而g只针对打美例化的踊坎

3、使用方式:

 4、举例模板:

 5、本题实现代码

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

思路:ab比较,可得min_ab,再用min_ab和c比较,可得abc的最小值min_abc。

注意:t1时刻进行ab比较,t2时刻min_ab和c比较。但是有个问题,t2时刻c和t1时刻的c不一样。所以我们要给c延迟一个clk,加一个d触发器即可。

设计代码

`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] min_ab;
reg [7:0] c_reg;

//给c加寄存器延迟一个clk
always @(posedge clk or negedge rst_n)begin
	if(!rst_n)
		c_reg <= 8'b0;
	else 
		c_reg <= c;
end

//先得到ab中的最小值min_ab 
minare u1(
		.clk(clk),
		.rst_n(rst_n),		
		.x_1(a),	
		.x_2(b),	
		.y(min_ab)	
	);

//再得到min_ab和c中的最小值d
minare u2(
		.clk(clk),
		.rst_n(rst_n),		
		.x_1(min_ab),	
		.x_2(c_reg),		//不能直接和c比较,因为ab的比较已经消耗了1个clk
		.y(d)				//此刻的c是下个时刻c,所以会出错。
	);

endmodule

module minare(
	input clk,
	input rst_n,
	input [7:0] x_1,
	input [7:0] x_2,
	output reg [7:0] y
);

always @(posedge clk or negedge rst_n)begin
	if(!rst_n)
		y <= 8'b0;
	else if(x_1 <= x_2)
		y <= x_1;
	else
		y <= x_2;
end

endmodule

VL10 使用函数实现数据大小端转换

        题目:请用函数实现一个4bit数据大小端转换的功能。实现对两个不同的输入分别转换并输出。

        在数字芯片设计中,经常把实现特定功能的模块编写成函数function,在需要的时候再在主模块中调用,以提高代码的复用性和提高设计的层次,方便后续的修改。    

大端小端区别:  

    大端:高字节数据存储在低地址。小端:低字节数据存储在低地址。

    在verilog中,是以比特为单位,例如十进制8,小端是1000,大端是0001。

    在c语言中,是以字节为单位,例如16进制1234,小端存储是3412,大端存储1234。

function和task的区别:

(1)任务能调用任务和函数,但是函数只能调用函数,不能调用任务;

(2)任务可以描述组合逻辑和时序逻辑,可以有时延;函数只能描述组合逻辑,仿真时延为0;

(3)任务可以有任意多个各种类型的输入;函数只能有input端口的输入参数,且至少输入一个参数;

(4)任务可以没有返回值;函数必须有一个返回值;

设计代码

module function_mod(
	input [3:0]a,
	input [3:0]b,
	
	output [3:0]c,
	output [3:0]d
);

assign c = data_reverse(a);
assign d = data_reverse(b);

function [3:0] data_reverse;	//函数名
	input [3:0] data_in;	//输入变量
	begin
		data_reverse[0] = data_in[3];
		data_reverse[1] = data_in[2];
		data_reverse[2] = data_in[1];
		data_reverse[3] = data_in[0];
	end
endfunction

endmodule

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

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

相关文章

数据结构题目收录(二十五)

1、排序趟数与序列的原始状态无关的排序方法是&#xff08;&#xff09;。 Ⅰ、直接插入排序 Ⅱ、简单选择排序 Ⅲ、冒泡排序 Ⅳ、基数排序 A&#xff1a;Ⅰ、ⅢB&#xff1a;Ⅰ、Ⅱ、ⅣC&#xff1a;Ⅰ、Ⅱ、ⅢD&#xff1a;Ⅰ、Ⅳ 解析 交换类的排序&#xff0c;其趟数和…

GUI编程--PyQt5--QDiaglog

文章目录QDialogQFontDialogQColorDialogQFileDialogQInputDialogQDialog 对话框基类&#xff0c;继承QWidget&#xff1b;用于短期任务&#xff0c;分为模态、非模态 模态&#xff0c;阻塞在当前窗口&#xff1b;分为应用程序级别&窗口级别&#xff08;仅阻塞关联的窗口&…

关于使用鼠标时间mouseMove拖拽元素及元素抖动的解决方案

最近在做一个画布相关的项目时有一个场景是移动画布&#xff0c;最先开始想到的是拖拽事件&#xff0c;但是用户希望元素是实时的变化&#xff0c;所以决定使用mouseMove事件来做。 思路 通过mouseDown事件确定鼠标按下的位置根据mouseMove事件来计算出鼠标相对初始状态的横向…

MySQL锁杂谈

【说明】 1.MySQL版本5.7.37 2.事务隔离级别 REPEATABLE-READ 3.表结构 Create Table: CREATE TABLE isolation_innodb (id bigint(20) NOT NULL AUTO_INCREMENT,name varchar(10) DEFAULT NULL,money int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT4…

jsp库存管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 库存管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开 发&#xff0c;数据库为Mysql&#xff0c;使用ja…

VMware Cloud Director数据库操作

VMware Cloud Director 是一个云服务平台&#xff0c;以自助服务模式提供安全、隔离、弹性的虚拟数据中心计算、网络、存储和安全。在NFV整个架构中属于VIM层&#xff0c;与NFVI层&#xff08;对VMware来说即vSphere虚拟化环境&#xff09;对接获取虚拟化资源并提供给租户。 NF…

服务访问质量(QoS)——QoS技术概述与配置

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.QoS技术概述 1.QoS的应用需求 ①网络拥塞的影响&#xff1a…

【Linux】项目自动化构建工具:make/Makefile的使用

文章目录一、背景1、make和makefile是什么&#xff1f;2、为什么要使用make和makefile?二、原理1、使用make和makefile2、依赖关系和依赖方法3、具体原理4、项目清理一、背景 1、make和makefile是什么&#xff1f; make是一个命令&#xff0c;是一个解释makefile中指令的命令…

Linux项目:自主web服务器

文章目录项目描述Web与 http 发展史DNSURI URL URNHTTP 概述项目纲要项目架构套接字的封装HTTP服务启动日志信息与工具类请求、响应类读取请求读取请求行读取请求报头分析请求行分析请求报头读取正文构建响应预处理返回静态网页CGI机制CGI机制的基本概念CGI函数的实现子CGI程序…

【点云处理】点云法向量估计及其加速(4)

上篇文章【点云处理】点云法向量估计及其加速(3)介绍了如何使用pcl提供的gpu版本法向量计算接口对点云发向量计算进行加速。不足之处在于点云k近邻查找依然比较耗时&#xff0c;成为影响整体计算性能的瓶颈。这篇文章就如何优化点云K近邻查找效率进行实验。上一篇文章的示例代码…

redis数据库的下载安装/免安装版

文章目录下载方式一下载方式二免安装版redis是一款高性能的NOSQL系列的非关系型数据库这里分享三个下载源&#xff0c;只介绍免安装版下载方式一 官网下下载https://redis.io&#xff08;国外网站下载速度比较慢&#xff09; 下载方式二 Redis中文网http://www.redis.net.cn…

想你所想,华为云桌面Workspace助你轻松办公

想你所想&#xff0c;华为云桌面Workspace助你轻松办公 双11作为近年来最受关注的购物季&#xff0c;从最开始的电商&#xff0c;到现在各行各业纷纷下场推出活动&#xff0c;期望在此段时间内迅速积累用户&#xff0c;从而提升产品知名度和用户基础。华为云也不例外&#xff0…

学生个人博客网页设计作品 学生个人网页模板 个人网页制作 HTML学生个人网站作业设计

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

应用商店的ASO和搜索引擎的SEO的区别

ASO和SEO&#xff0c;目标相似&#xff0c;有着异曲同工之妙&#xff0c;两者都是提高搜索排名的方式&#xff0c;具体有什么区别呢&#xff1f;今天柚鸥ASO给大家做一下总结。 SEO是指搜索引擎优化&#xff0c;利用搜索引擎的规则来提高网站&#xff08;例如&#xff1a;百度…

室内定位解决方案-最新全套文件

室内定位解决方案-最新全套文件一、建设背景二、建设思路三、建设方案四、获取 - 室内定位全套最新解决方案合集一、建设背景 室内定位顾名思义就是定位室内目标对象的位置&#xff0c;可以是人也可以是物体的位置的一种技术方案&#xff0c;根据定位精度的不同&#xff0c;被…

C++ Primer Plus第五版笔记(p1-50)

1 在unix中 echo 获得状态 2iostream 包含istream以及ostream:随着时间的推移&#xff0c;字符是按照顺序生成或者是消耗的 3cin标准输入 cout标准输出 Cerr标准错误 clog 一般性信息 4cin>>c1>>c2&#xff1b;连续输入 5cout是ostream的对象&#xff0c;第一个<…

VirtualBox安装openEuler

下载&#xff1a; https://www.openeuler.org/zh/mirror/list/ 根据设备架构选择对应的版本&#xff1a;windows是x86架构 选择下面这个4.2G大小的&#xff1a; 安装&#xff1a; 1&#xff0c;点击新建&#xff1a; 按下图设置 设置内存大小&#xff0c;使用的cpu数…

SpringBoot项目在使用Maven打包war中遇到的问题

问题描述 在使用maven打包&#xff08;package&#xff09;springboot项目为war项目后&#xff0c;在本地机器上使用Tomcat跑这个项目&#xff0c;访问资源时出现下面的错误&#xff1a; o.s.b.w.servlet.support.ErrorPageFilter : Cannot forward to error page for reque…

TIKTOK出海公会为什么是2022出海风口?有哪些机遇与挑战?

近两年在全球迅速扩张市场的TIKTOK一举跃为全球下载量第一的APP&#xff0c;背靠十几亿月活用户的流量矿山&#xff0c;成为首个非Facebook系达成此成就的应用&#xff0c;可谓是赚足了全世界的目光。与此同时&#xff0c;大量跨境商家与自媒体从业者也盯上了TIKTOK的造富潜力&…

zlib-1.2.11库、libpng-1.6.36库编译及交叉编译 —— 附带shell编译脚本及源码

目录 一、zlib-1.2.11库编译 二、libpng-1.6.36库编译 三、编译zlib和libpng的编译脚本 编译libpng库之前需要先下载编译zlib库&#xff0c;因为libpng需要依赖zlib才能编译通过。 编译环境如下&#xff1a;ubunt 14.04、gcc 4.8.4、arm-hisiv100nptl-linux-gcc 一、zlib-1.2…