Verilog刷题笔记36

news2024/12/28 21:18:46

题目:
Create a 4-bit wide, 256-to-1 multiplexer. The 256 4-bit inputs are all packed into a single 1024-bit input vector. sel=0 should select bits in[3:0], sel=1 selects bits in[7:4], sel=2 selects bits in[11:8], etc.
在这里插入图片描述
我的解法:

module top_module( 
    input [1023:0] in,
    input [7:0] sel,
    output [3:0] out );

    assign out[3:0]=in[sel*4+4:sel*4];
endmodule

结果错误,错误原因:
根据编译结果的提示,in[sel4+3:sel4]有错,因为sel不是常数,所以导致了选择的位宽不是常数。所以冒号两侧都不能出现变量,否则就会报错sel is not constant。

正确解法:

module top_module (
	input [1023:0] in,
	input [7:0] sel,
	output [3:0] out
);

	// We can't part-select multiple bits without an error, but we can select one bit at a time,
	// four times, then concatenate them together.
	assign out = {in[sel*4+3], in[sel*4+2], in[sel*4+1], in[sel*4+0]};

	// Alternatively, "indexed vector part select" works better, but has an unfamiliar syntax:
	// assign out = in[sel*4 +: 4];		// Select starting at index "sel*4", then select a total width of 4 bits with increasing (+:) index number.
	// assign out = in[sel*4+3 -: 4];	// Select starting at index "sel*4+3", then select a total width of 4 bits with decreasing (-:) index number.
	// Note: The width (4 in this case) must be constant.

endmodule

知识点:
1、

assign out = {in[sel*4+3], in[sel*4+2], in[sel*4+1], in[sel*4+0]};

使用大括号 {} 运算符,逐位选取后再进行连接。这种方法适用于选取单个位时,但如果需要选择多个连续的位,则会出现错误。示例代码中使用了这种方法,通过逐位选取并连接来实现对输入信号 in 中的特定位的选取。
该方法使用拼接符,每次都取一位,把四位拼接起来,所以虽然in[4*sel+3]中存在变量,但也不影响,因为这个变量的位数是确定的,就是1位。

2、注意该种索引方法:

assign out = in[sel*4 +: 4];      // 从索引 "sel*4" 开始选择,然后选择总宽度为 4 位,索引递增。
assign out = in[sel*4+3 -: 4];    // 从索引 "sel*4+3" 开始选择,然后选择总宽度为 4 位,索引递减。

使用“indexed vector part select”语法,这种方法对于选择连续的多个位更为方便。示例代码中提供了两种这种语法的示例,分别是正向递增选择和逆向递减选择。这种语法的特点是通过指定起始索引和位宽来进行选取,比较直观和方便。
冒号前是起始索引位置,+号代表方向是往高位索引,冒号后面代表索引n个位。-号代表方向是往低位索引,冒号后面代表索引n个位。冒号前的位置代表的是起始位置,并不代表是高位。也就是说,这个语法,以冒号前的位置作为起始位置,往高位或者低位取4位,然后再把这四位从高到低,放进4位宽的信号里。
使用了矢量检索的语法,在该种语法下,in[sel*4+:4]中虽然也出现了变量,但是冒号后的4决定了取多少个位,即位宽是确定的。

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

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

相关文章

【蜂窝物联】医院WiFi全覆盖解决方案

项目背景 随着信息化程度的普及,无线网络覆盖的需求显得愈发突出,移动通信(GSM,3G,4G)的网络在很多区域无法满足客户的速率要求,而且不能满足某些特定场景的业务需求。医院是人流密集场所,进行…

C语言——指针——第1篇——(第19篇)

坚持就是胜利 文章目录 1.指针是什么2.指针和指针类型(1)指针 - 整数(2)指针 的 解引用 3.野指针(1)野指针成因1.指针未初始化2.指针越界访问3.指针指向的空间释放 (2)如何规避野指针1.指针初始化2.小心指针越界3.指针指向的空间…

Diehl EDI 项目案例

代傲Diehl 是一家拥有120多年历史的德国科技企业,凭借其多元化的产品在不同工业领域的各个业务线中备受好评。 由于Diehl的合作伙伴遍及全球,如何管理来自全球各地不同标准、不同格式的业务数据成为一大难题。EDI(Electronic Data Interchan…

win系统下安装php8.3版本并配置环境变量的详细教程

本篇文章主要讲解在win系统下安装和配置php8.3版本,并配置环境变量的详细教程。 日期:2024年2月22日 作者:任聪聪 一、下载php8.3版本包 php8.3版本官方下载地址:https://windows.php.net/download#php-8.3 步骤一、打开下载地址…

四、矩阵的分类

目录 1、相等矩阵 2、同形矩阵 3、方阵: 4、负矩阵、上三角矩阵、下三角矩阵: 5、对角矩阵:是方阵 ​编辑7、单位矩阵:常常用 E或I 来表示。它是一个方阵 8、零矩阵: 9、对称矩阵:方阵 1、相等矩阵 …

JAVA IDEA 项目打包为 jar 包详解

前言 如下简单 maven 项目,现在 maven 项目比较流行,你还没用过就OUT了。需要打包jar 先设置:点击 File > Project Structure > Artifacts > 点击加号 > 选择JAR > 选择From modules with dependencies 一、将所有依赖和模…

docker部署seata1.6.0

docker部署seata1.6.0 Seata 是 阿里巴巴 开源的 分布式事务中间件,解决 微服务 场景下面临的分布式事务问题。需要先搭建seata服务端然后与springcloud的集成以实现分布式事务控制的过程 ,项目中只需要在远程调用APi服务的方法上使用注解 GlobalTransa…

1.1_1 计算机网络的概念、功能、组成和分类

文章目录 1.1_1 计算机网络的概念、功能、组成和分类(一)计算机网络的概念(二)计算机网络的功能(三)计算机网络的组成1.组成部分2.工作方式3.功能组成 (四)计算机网络的分类 总结 1.…

2023 H1 中国边缘公有云服务市场 Top2,百度智能云加速推动分布式云智能化升级

近期,IDC 发布了《中国边缘云市场跟踪研究 2023 H1》。报告显示,2023 上半年,中国边缘公有云服务市场规模 24.3 亿元,同比增速达到 41.8%。 其中,百度智能云以 15.7% 的市场份额位列中国边缘公有云服务市场第二&#…

力扣经典题目解析--旋转图像(字节二面)

题目 原题地址: . - 力扣(LeetCode) 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1…

216699-36-4,6-Rhodamine X NHS ester,具有良好的脂溶性

117491-83-5,1890922-83-4,216699-36-4,6-Rhodamine X NHS ester,ROX SE, 6-isomer,6-ROX NHS 活化酯 您好,欢迎来到新研之家 文章关键词:117491-83-5,1890922-83-4,21…

【四川省计算机学会主办 | 中国科协重要学术会议】人工智能与大数据国际会议(ICAIBD 2024)

ICAIBD 2024https://www.icaibd.org/ 会议简介: 第七届人工智能与大数据国际会议(ICAIBD 2024)将于2024年5月24-27日在中国▪四川▪成都召开。七年来,ICAIBD 2024由四川省计算机学会主办,四川省科学技术协会作为指导单位,四川大…

【VRTK】【Unity】【VR开发】使用注意事项-Simulator没反应

【背景】 建立一个基本的VRTK项目后,用Simulator Rig模拟运行,移动鼠标后发现Simulator Rig没有任何反应。 【分析】 Console中的报错信息类似于没有启用Legacy unity input package,Legacy的意思是经典的,所以应该是指没有在p…

[linux]进程间通信(IPC)———共享内存(shm)(什么是共享内存,共享内存的原理图,共享内存的接口,使用演示)

一、什么是共享内存 共享内存区是最快的(进程间通信)IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。注意:…

kubernetes的网络flannel与caclio

flannel网络 跨主机通信的一个解决方案是Flannel,由CoreOS推出,支持3种实现:UDP、VXLAN、host-gw udp模式:使用设备flannel.0进行封包解包,不是内核原生支持,上下文切换较大,性能非常差 vxlan模…

第3.5章:StarRocks数据导入——Broker Load

注:本篇文章阐述的是StarRocks-3.2版本的Broker Load导入机制 一、概述 Broker Load导入方式支持从HDFS类的外部存储系统(例如:HDFS、阿里OSS、腾讯COS、华为云OBS等),支持Parquet、ORC、CSV、及 JSON 四种文件格式&a…

adb-常用命令

1. 连接设备:adb connect ip地址 2. 查询已连接设备列表:adb devices 3. 进入手机端后台:adb shell 4. 退出手机端后台:exit 5. 将手机端文件复制到pc端:adb pull 手机端文件路径/文件 pc端路径 6. 将pc端文件复制到…

根据前序和后序遍历构造二叉树

1.题目 这道题是2024-2-22的签到题,题目难度为中等。 考察知识点为递归。 题目链接:889. 根据前序和后序遍历构造二叉树 - 力扣(LeetCode) 给定两个整数数组,preorder 和 postorder ,其中 preorder 是一…

petalinux_zynq7 驱动DAC以及ADC模块之二:petalinux

petalinux_zynq7 C语言驱动DAC以及ADC模块之一:建立IPhttps://blog.csdn.net/qq_27158179/article/details/136234296在上一篇,建立了ADC和DAC两个IP。这里继续。本文在 petalinux默认配置的基础上,添加了python和qt。再编译出sdk可以给x86主…

Flask——基于python完整实现客户端和服务器后端流式请求及响应

文章目录 本地客户端Flask服务器后端客户端/服务器端流式接收[打字机]效果 看了很多相关博客,但是都没有本地客户端和服务器后端的完整代码示例,有的也只说了如何流式获取后端结果,基本没有讲两端如何同时实现流式输入输出,特此整…