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

2024-02-07 02:52

本文主要是介绍【芯片设计- RTL 数字逻辑设计入门 11 -- 移位运算与乘法】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


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


文章目录

    • 移位运算与乘法
      • Verilog Code
      • 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

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;
`endifclk = 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 波形仿真

在这里插入图片描述

问题小结

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

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

这篇关于【芯片设计- RTL 数字逻辑设计入门 11 -- 移位运算与乘法】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/686315

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi