【Verilog HDL-1】基本、向量、模块

HDL习题

1 阻塞型赋值‘=’与非阻塞型赋值‘<=’

阻塞型赋值 b = a b=a b=a:适用于纯组合电路
非阻塞型赋值 b < = a b<=a b<=a:适用与时序逻辑电路

2 wire线型,assign连续赋值

wire a,b,c;
assign b = a;
assign c = a;

与编程语言不同, a s s i g n assign assign “连续赋值” 描述的是 事物之间的联系,而不是将值从a复制到b的操作。那么多个赋值语句之间不存在像C语言中的先后关系。

  • AngGate
assign out = a & b;
  • norGate 或非门
assign out = ~(a | b);
  • xorGate 异或门 ⊕ \oplus
assign out = a ^ b;//^按位异或
  • xnorGate 同或门 ⊙ \odot
assign out = ~(a ^ b);

在这里插入图片描述

3 vector向量[end:start]

3-1 Vectorgates

module top_module(
	input wire[2:0] a, 
	input wire[2:0] b, 
	output wire[2:0] out_or_bitwise,
	output wire out_or_logical,
	output wire[5:0] out_not
);
	
	assign out_or_bitwise = a | b;	// 按位相或
	assign out_or_logical = a || b;	// 各位一次相或	

	assign out_not[2:0] = ~a;	// 按位取反
	assign out_not[5:3] = ~b;	
	
endmodule

3-2 向量合并

例如: { 1 ′ b 1 , 1 ′ b 0 , 3 ′ b 101 } = > 5 ′ b 10101 \{1'b1, 1'b0, 3'b101\} => 5'b10101 {1b1,1b0,3b101}=>5b10101

module top_module (
    input [4:0] a, b, c, d, e, f,
    output [7:0] w, x, y, z );
    assign {w, x, y, z} = {a, b, c, d, e, f, 2'b11};
endmodule

3-3 反转

module top_module( 
    input [7:0] in,
    output [7:0] out
);
	// 方式一
	generate
    	genvar i;
        for(i = 0;i < 8;i++)begin:conv//generate块的名为conv
            assign out[i] = in[7-i];
        end
    endgenerate
    
    // 方式二
    always@(*)begin
        for(int i = 0;i < 8;i++)begin
            out[i] = in[7-i];
        end
    end
endmodule

3-4 复制

assign out = {{24{in[7]}}, in};

4 模块

4-1 模块移位

module top_module ( input clk, input d, output q );
    wire q1,q2;
    my_dff dff1(
        .clk(clk),
        .d(d),
        .q(q1)
    );
    my_dff dff2(
        .clk(clk),
        .d(q1),
        .q(q2)
    );
    my_dff dff3(
        .clk(clk),
        .d(q2),
        .q(q)
    );
endmodule

4-2 32位加法器

// 32位加法器由2个16位加法器组成,一个16位加法器由16个半加器组成
module top_module (
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);
	wire cout1;
	add16 add16_1(
		.a(a[15:0]),
		.b(b[15:0]),
		.cin(1'b0),
		.sum(sum[15:0]),
		.cout(cout1)
	);
	add16 add16_2(
		.a(a[31:16]),
		.b(b[31:16]),
		.cin(cout1),
		.sum(sum[31:16]),
		.cout()
	);
endmodule

module add1 (
	input a, b, cin, 
	output sum, cout );
	assign {cout,sum} = a + b + cin;
endmodule

其中 assign {cout,sum} = a + b + cin; 例如四位加法器有:
a d e c = 11 , b d e c = 13 , a + b d e c = 24 a_{dec}=11,b_{dec}=13,a+b_{dec}=24 adec=11,bdec=13,a+bdec=24 a b i n = 1011 , b b i n = 1101 a_{bin}=1011,b_{bin}=1101 abin=1011,bbin=1101, ( a + b ) b i n = (a+b)_{bin}= (a+b)bin= 0001 0001 0001 1000 1000 1000
c i n n − 1 = c o u t n cin_{n-1}=cout_{n} cinn1=coutn

位号cinabcoutsum
001110
111010
210110
311111

4-3 减法器

module top_module(
    input [31:0] a,
    input [31:0] b,
    input sub,
    output [31:0] sum
);
    wire cout1;
    wire [31:0] b_in;
    assign b_in = b ^ {32{sub}};   // 异或
    add16 add16_1(
        .a(a[15:0]),
        .b(b_in[15:0]),
        .cin(sub),
        .sum(sum[15:0]),
        .cout(cout1)
    );
    add16 add16_2(
        .a(a[31:16]),
        .b(b_in[31:16]),
        .cin(cout1),
        .sum(sum[31:16]),
        .cout()
    );
endmodule

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

普通集群与镜像集群配置

一. 环境准备 关闭防火墙和selinux&#xff0c;进行时间同步 rabbitmq-1 Rocky_linux9.4 192.168.226.22rabbitmq-2Rocky_linux9.4192.168.226.23rabbitmq-3Rocky_linux9.4192.168.226.24 修改主机名#192.168.226.22 hostnamectl set-hostname rabbitmq-1#192.168.226.22 ho…

【操作系统期末速成】 EP03 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️2.1 考点五&#xff1a;进程的概念及特征2.1 考点六&#xff1a;进程的状态与切换 一、前言&#x1f680;&#x1f680;&#x1f680; ☀️ 回报不在行动之后&#xff0c;回报在行动…

HIVE每日一题

select * from sku_info order by sku_id ; 为什么结果没有顺序排序。什么原因导致的&#xff1f;

75. UE5 RPG 创建场景摆放部件蓝图

这一篇文章来点简单的内容&#xff0c;相当于我们使用蓝图创建类似于unity的预制体。 创建一个一个柱子蓝图 首先&#xff0c;我们创建一个立柱的蓝图&#xff0c;将我们之前创建的柱子上面含有火焰和灯光的部分合并成一个蓝图&#xff0c;方便往场景内添加。 点击创建一个基…

【SpringBoot】SpringBoot核心启动流程源码解析

SpringBoot总体流程 当我们启动一个SpringBoot程序的时候&#xff0c;只需要一个main方法就可以启动&#xff0c;但是对于其中流程时如何执行的&#xff0c;以及如何调用spring的IOC和AOP机制&#xff0c;本篇带着这个问题来整体体系化的梳理下流程。 SpringBootApplication …

【语言模型】Xinference的部署过程

一、引言 Xinference&#xff0c;也称为Xorbits Inference&#xff0c;是一个性能强大且功能全面的分布式推理框架&#xff0c;专为各种模型的推理而设计。无论是研究者、开发者还是数据科学家&#xff0c;都可以通过Xinference轻松部署自己的模型或内置的前沿开源模型。Xinfe…

一种基于滑动窗口扩展上下文的RAG(检索增强生成)优化实现方案实践

RAG&#xff08;检索增强生成&#xff09;是一种结合了检索&#xff08;通常是知识库或数据库&#xff09;和生成模型&#xff08;大语言模型&#xff09;的技术&#xff0c;目的是在生成文本的时候能够参考相关的外部知识。这样&#xff0c;即使生成模型在训练时没有看到某些信…

使用Dockerfile构建镜像 使用docker-compose 一键部署IM项目

本文讲解&#xff1a;使用Dockerfile构建镜像 & 使用docker-compose 一键部署IM项目。 im项目地址&#xff1a;xzll-im &#xff0c;欢迎志同道合的开发者 一起 维护&#xff0c;学习&#xff0c;欢迎star &#x1f604; 1、Dockerfile编写与镜像构建&容器运行 Dockerf…

大语言模型(LLM)LangChain介绍

LangChain是一个利用大语言模型的能力开发各种下游应用的开源框架&#xff0c;它的核心理念是为各种大语言模型应用实现通用的接口&#xff0c;简化大语言模型应用的开发难度&#xff0c;主要的模块示意图为&#xff1a; Index&#xff1a;提供了各类文档导入、文本拆分、文本向…

夏天到了,用这两款软件,悄悄惊艳所有人!

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 夏天来了&#xff0c;又到了“露肉”的季节&#xff0c;或许大家会为了身材烦恼&#xff0c;即便有运动意愿却苦于健身计划和时间上安排&#xff0c;也没有合适的免费软件。 别担心&a…

1-爬虫基础知识(6节课学会爬虫)

1-爬虫基础知识&#xff08;6节课学会爬虫&#xff09; 1.什么是爬虫2.爬取的数据去哪了3.需要的软件和环境4.浏览器的请求&#xff08;1&#xff09;Url&#xff08;2&#xff09;浏览器请求url地址&#xff08;3&#xff09;url地址对应的响应 5.认识HTTP/HTTPS5.1 http协议之…

餐饮火锅加盟网站pbootcms模板源码

模板介绍 如果您正在创建火锅店、餐饮店或加盟网站&#xff0c;小编推荐您下载这款餐饮火锅加盟网站pbootcms模板源码&#xff0c;整站源码响应式自适应的设计&#xff0c;可以让您自由编辑且适应任何终端浏览器&#xff0c;节约您的建站时间成本。 模板截图 源码下载 餐饮火…

生成式人工智能和机器人技术是否即将取得最后的突破?

了解生成式人工智能与机器人技术的融合如何彻底改变从医疗保健到娱乐等行业 想象一下这样一个世界&#xff0c;机器人可以谱写交响乐、画出杰作、写出小说。这种创造力与自动化的迷人融合&#xff0c;由 生成式人工智能&#xff0c;不再是梦想&#xff1b;它正在以重大方式重塑…

前后端分离的后台管理系统开发模板(带你从零开发一套自己的若依框架)上

前言&#xff1a; 目前&#xff0c;前后端分离开发已经成为当前web开发的主流。目前最流行的技术选型是前端vue3后端的spring boot3&#xff0c;本次。就基于这两个市面上主流的框架来开发出一套基本的后台管理系统的模板&#xff0c;以便于我们今后的开发。 前端使用vue3ele…

go Channel 原理 (一)

Channel 设计原理 不要通过共享内存的方式进行通信&#xff0c;而是应该通过通信的方式共享内存。 在主流编程语言中&#xff0c;多个线程传递数据的方式一般都是共享内存。 Go 可以使用共享内存加互斥锁进行通信&#xff0c;同时也提供了一种不同的并发模型&#xff0c;即通…

Postman设置请求间自动保存返回参数,方便后续请求调用,减少复制粘贴

postman中常常出现&#xff1a;有两个请求&#xff0c;一个请求首先获取验证码或者token&#xff0c;再由得到的验证码或token编写body发送另一个请求。如何设置两个请求间自动关联相关数据呢&#xff1f; 通过环境存储全局变量 现在有两个请求如下图&#xff0c;生成验证码是…

代理IP如何助力旅游信息聚合?

在数字化时代&#xff0c;旅游信息聚合对于提升服务质量、优化用户体验起着至关重要的作用。随着在线旅游预订的普及&#xff0c;旅游信息的采集、整合和呈现成为了一个复杂而关键的过程。在这个过程中&#xff0c;代理IP技术以其独特的优势&#xff0c;为旅游信息聚合提供了强…

服务器硬件以及RAID配置

目录 一、RAID磁盘阵列原理&#xff08;嘎嘎重要&#xff09; 1、RAID的概述 2、常用的RAID 2.1、RAID 0 2.2、RAID 1 2.3、RAID 5 2.5、RAID 10 3、阵列卡介绍 二、建立软件RAID磁盘阵列 1、添加硬盘 2、使用fdisk分区&#xff0c;类型为fd 3、mdata命令使用参数 …

CXL:拯救NVMe SSD缓存不足设计难题-2

LMB提出了基于CXL协议的内存扩展框架和内核模块。该方案利用CXL内存扩展器作为物理DRAM源&#xff0c;旨在提供一个统一的内存分配接口&#xff0c;使PCIe和CXL设备都能方便地访问扩展的内存资源。通过这个接口&#xff0c;NVMe驱动和CUDA的统一内存内核驱动可以直接高效地访问…

探索人工智能和LLM对未来就业的影响

近年来&#xff0c;人工智能&#xff08;AI&#xff09;迅猛发展&#xff0c;引发了人们的兴奋&#xff0c;同时也引发了人们对就业未来的担忧。大型语言模型&#xff08;LLM&#xff09;就是最新的例子。这些强大的人工智能子集经过大量文本数据的训练&#xff0c;以理解和生成…