【芯片设计- RTL 数字逻辑设计入门 11 -- 移位运算与乘法】


请阅读【嵌入式开发学习必备专栏 】


文章目录

    • 移位运算与乘法
      • Verilog Code
      • verilog 拼接运算符({})
      • Testbench Code
      • VCS 波形仿真
    • 问题小结

移位运算与乘法

已知d为一个8位数,请在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号通知此时刻输入的d有效(d给出的信号的上升沿表示写入有效)
在这里插入图片描述
在这里插入图片描述
可以看到输入D 的波形在为6的地方比较特殊,从波形上可以看到它只持续了一个时钟周期,但是out 在乘1/3/7/8的时候都是使用这个6,而且根本没有用到d上的128,下一个信号直接是129的4次运算。所以不能根据D的实时变化来计算out的实时变化。

所以在第一个input_grant的时候需要对输入信号进行寄存,寄存持续4个时钟周期都去改变它,直到下个有效数据到的时候再去寄存。乘法操作都是针对寄存下来的值进行。

input_grant 在执行乘1运算的时候拉高,这里采用计数器的方式,在复位的时候计数器归0,一旦复位失效拉成高电平之后就开始计数,计数值为0/1/2/3, 一共是2bits的信号, 根据计数值来判断输出,其实这种方式就是一个简化后的有限状态机的方式。

Verilog Code

module multi_sel(input		        clk,input		        rstn,input[7:0]	        d,output reg	        input_grant,output reg[10:0]    out
);reg[1:0] count;
always @(posedge clk or negedge rstn) beginif (~rstn) begincount <= 2'b0;endelse begincount <= count + 1'b1;end
end// FSM methodology
reg[7:0]	d_reg;
always@(posedge clk or negedge rstn) beginif (~rstn) beginout <= 11'b0;input_grant <= 1'b0;d_reg <= 8'b0;endelse begincase(count)2'b00:beginout <= d;d_reg <= d;input_grant <= 1'b1;end2'b01:beginout <= d_reg + {d_reg, 1'b0}; // *3input_grant <= 1'b0;end2'b10:beginout <= d_reg + {d_reg, 1'b0} + {d_reg, 2'b0}; // *7input_grant <= 1'b0;end2'b11:beginout <= {d_reg, 3'b0}; // *8input_grant <= 1'b0;enddefault: beginout <= d;input_grant <= 1'b0;endendcaseend
end
endmodule

verilog 拼接运算符({})

a = 2'b10;
b = 3'b101;

则:

c = {a, b} = 5'b10101;
d = {2'b00, a} = 4'b0010;
e = {3{a}} = 6'b101010;
f = {{2{a}, b 1'b1} = 8'b10101011;

拼接乘法

a = 4'b1110;

g = {a, 1'b0} = 5'b11100; // *2

Testbench Code


module test;reg         clk;reg         rstn;reg[7:0]    d;reg         input_grant;reg[10:0]   out;multi_sel multi_sel_test(.clk(clk),.rstn(rstn),.d(d),.input_grant(input_grant),.out(out));initial begin
`ifdef DUMP_FSDB$display("Dump fsdb wave!");$fsdbDumpfile("test.fsdb");$fsdbDumpvars;
`endifendinitial beginclk = 1'b0;rstn = 1'b0;d = 8'b0;#15rstn = 1'b1;endinitial beginrepeat(200) begin#10 clk =~clk;$display("---run time ---: %d", $time);if ($time >= 1000) begin$finish;endendendinitial begind = 8'd143;#30 d = 8'd7;#50 d = 8'd6;#60 d = 8'd128;#50 d = 8'd129;#50 $finish;end
endmodule

VCS 波形仿真

在这里插入图片描述
从波形图可以看到只有当input_grant 信号为高的时候 data 数据才有效,这里的input_grant 就类似于 AXI总线上的 valid 信号,用来表示数据是否有效。

问题小结

问题1
在这里插入图片描述
systemverilog 中输出信号赋值导致的error。

问题2 rstn 信号一直为0
在这里插入图片描述
检查 rstn 是否赋值为1’b1;

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

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

相关文章

飞书上传图片

飞书上传图片 1. 概述1.1 访问凭证2. 上传图片获取image_key1. 概述 飞书开发文档上传图片: https://open.feishu.cn/document/server-docs/im-v1/image/create 上传图片接口,支持上传 JPEG、PNG、WEBP、GIF、TIFF、BMP、ICO格式图片。 在请求头上需要获取token(访问凭证) …

前端入门:(五)JavaScript 续

10. 浏览器存储 10.1 Cookie的概念和使用 Cookie是一种存储在用户计算机上的小型文本文件&#xff0c;用于跟踪和识别用户。Cookie通常用于存储用户的偏好设置、会话信息等&#xff0c;可以通过JavaScript进行读取和设置。 // 示例&#xff1a;设置和读取Cookie document.co…

侵入式智能指针和非侵入式智能指针

一直有个疑问&#xff0c;为什么chromium代码没有使用shared_ptr呢&#xff1f; 在这里讨论&#xff1a;https://groups.google.com/a/chromium.org/g/cxx/c/aT2wsBLKvzI 不过我在这里找到了一个简单的答案&#xff1a;https://groups.google.com/a/chromium.org/g/chromium-d…

MySQL优化器

优化器 MySQL存储引擎中存在了一个可插拔的优化器OPTIMIZER_TRACE&#xff0c;可以看到内部查询计划的TRACE信息&#xff0c;从而可以知道MySQL内部执行过程 查询优化器状态 show variables like optimizer_trace;Variable_name Valueoptimizer_trace enabledoff,one_lineoff…

sqlite3数据库操作接口详细整理,以及常用的数据库语句

sqlite3_open() int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); 功能&#xff1a;打开一个数据库&#xff0c;如果数据库不存在&#xff0c;则创建一个数据库 参数1&#xff1a;要打开的数据库的名字…

Go语言每日一题——链表篇(七)

传送门 牛客面试笔试必刷101题 ----------------删除链表的倒数第n个节点 题目以及解析 题目 解题代码及解析 解析 这一道题与昨天的题目在解题思路上有一定的相似之处&#xff0c;都是基于双指针定义快慢指针&#xff0c;这里我们让快指针先走n步&#xff0c;又因为n一定…

吉他学习:右手拨弦方法,右手拨弦训练 左手按弦方法

第六课 右手拨弦方法https://m.lizhiweike.com/lecture2/29362775 第七课 右手拨弦训练https://m.lizhiweike.com/lecture2/29362708

Matplotlib 中文柱状图绘制详解

在数据可视化的过程中,Matplotlib是Python中最受欢迎的绘图库之一。然而,当涉及到中文字符的显示时,可能会遇到一些挑战。在这篇博客中,我们将详细讨论如何使用Matplotlib绘制中文柱状图。 1. 设置中文显示 首先,为了确保中文字符的正确显示,我们需要设置Matplotlib的字…

vue.js基于springboot的实验室设备管理系统10345

(1)设备信息模块&#xff1a;记录设备的基本信息&#xff0c;如设备采购来源信息、设备需求量、当前数量、日期等。 (2) 用户模块&#xff1a;教师职工。实现对用户个人信息、消息管理和实验室设备的查询使用申请等。 (3) 管理员模块&#xff1a;实现对所有设备信息的增删改查&…

关于LLaMA Tokenizer的一些坑...

使用LLaMA Tokenizer对 jsonl 文件进行分词&#xff0c;并将分词结果保存到 txt 文件中&#xff0c;分词代码如下&#xff1a; import jsonlines import sentencepiece as spm from tqdm import tqdmjsonl_file /path/to/jsonl_file txt_file /path/to/txt_filetokenizer s…

腾讯云游戏服务器购买入口,详细配置精准报价

2024年更新腾讯云游戏联机服务器配置价格表&#xff0c;可用于搭建幻兽帕鲁、雾锁王国等游戏服务器&#xff0c;游戏服务器配置可选4核16G12M、8核32G22M、4核32G10M、16核64G35M、4核16G14M等配置&#xff0c;可以选择轻量应用服务器和云服务器CVM内存型MA3或标准型SA2实例&am…

BUUCTF-Real-[Tomcat]CVE-2017-12615

目录 漏洞描述 一、漏洞编号&#xff1a;CVE-2017-12615 二、漏洞复现 get flag 漏洞描述 CVE-2017-12615&#xff1a;远程代码执行漏洞 影响范围&#xff1a;Apache Tomcat 7.0.0 - 7.0.79 (windows环境) 当 Tomcat 运行在 Windows 操作系统时&#xff0c;且启用了 HTTP P…

MVC模式Nodejs+express+Mysql开发后台

想给自己的博客做个后台&#xff0c;一开始考虑的是java开发&#xff0c;然后把idea和一堆东西勤勤恳恳安装完了之后&#xff0c;心里一想&#xff0c;算了&#xff0c;咱就nodejs不方便多了&#xff0c;于是开始Nodejs开发后台。 Java和idea环境安装 安装jdk(1.8)安装idea&…

Qlik Sense : where exists

什么是Exists函数 Exists() 用于确定是否已经将特定字段值加载到数据加载脚本中的字段。此函数用于返回 TRUE 或 FALSE&#xff0c;这样它可以用于 LOAD 语句或 IF 语句中的 where 子句。 信息注释您也可使用 Not Exists() 来确定是否尚未加载字段值&#xff0c;但是如果要在…

Excel+VBA处理高斯光束

文章目录 1 图片导入与裁剪2 获取图片数据3 数据拟合 1 图片导入与裁剪 插入图片没什么好说的&#xff0c;新建Excel&#xff0c;【插入】->【图片】。 由于图像比较大&#xff0c;所以要对数据进行截取&#xff0c;选中图片之后&#xff0c;点击选项卡右端的【图片格式】…

【JavaWeb】头条新闻项目实现 基本增删改查 分页查询 登录注册校验 业务功能实现 第二期

文章目录 一、为什么使用token口令二、登录注册功能2.1 登录表单提交后端代码&#xff1a; 2.2 根据token获取完整用户信息代码实现&#xff1a; 2.3 注册时用户名占用校验代码实现&#xff1a; 2.4 注册表单提交代码实现&#xff1a; 三、头条首页功能3.1 查询所有头条分类3.2…

打卡今天学习 Linux

过年了&#xff0c;祝大家过年快乐 在今天的学习中&#xff0c;我们涉及了一些关键的 Linux 系统管理知识点&#xff0c;包括 systemctl、IP 地址配置、域名解析、映射的创建、软链接等。让我们简要回顾一下这些主题。 1. systemctl systemctl 是一个强大的 Linux 系统管理工…

docker自定义镜像并使用

写在前面 本文看下如何自定义镜像。 ik包从这里 下载。 1&#xff1a;自定义带有ik的es镜像 先看下目录结构&#xff1a; /opt/program/mychinese [rootlocalhost mychinese]# ll total 16 -rw-r--r-- 1 root root 1153 Feb 5 04:18 docker-compose.yaml -rw-rw-r-- 1 el…

利巴韦林市场规模及厂商格局分析

利巴韦林又名病毒唑&#xff0c;是一种合成鸟苷类似物&#xff0c;对多种DNA和RNA病毒具有广谱活性&#xff0c;可干扰病毒mRNA的合成。利巴韦林1970年由ICN制药公司发现&#xff0c;1986年被批准临床应用&#xff0c;通常与干扰素药物&#xff08;如聚乙二醇干扰素α-2a或聚乙…

开源大型语言模型概览:多语种支持与中文专注

开源大型语言模型概览&#xff1a;多语种支持与中文专注 开源大型语言模型概览&#xff1a;多语种支持与中文专注什么是大型语言模型如何工作大型语言模型的发展应用领域 开源大语言模型概览支持多种语言的开源LLMsLLaMA&#xff08;由Meta开发&#xff09;BERT&#xff08;由G…