【芯片设计- RTL 数字逻辑设计入门 11.2 -- 状态机实现 移位运算与乘法 2】

文章目录

    • 移位运算与乘法
    • parameter
      • parameter 特点
      • parameter 基本语法
      • parameter 示例
      • 局部参数
      • 局部参数示例
    • 状态机代码实现
      • VCS 仿真结果

文章 【芯片设计- RTL 数字逻辑设计入门 11.1 – 状态机实现 移位运算与乘法 1】 介绍了状态机,本篇文章主要就是使用状态机的方式来实现移位运算与乘法。

移位运算与乘法

已知d为一个8位数,请在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号通知此时刻输入的d有效(d给出的信号的上升沿表示写入有效)
在这里插入图片描述
在这里插入图片描述

parameter

这里先介绍下 SystemVerilog中的关键字parameter。在SystemVerilog中,parameter关键字用于定义模块、类或函数内的常量。这些常量在编译时确定,可以在模块实例化时进行重写,从而提供了设计的可配置性和灵活性。parameter可以定义标量、数组或结构等类型的常量。

parameter 特点

  • 静态定义parameter在编译时设置,不能在运行时更改。
  • 默认值:在声明时可以设置默认值。
  • 可重载:在模块实例化时可以更改其值。
  • 数据类型:可以有特定的数据类型,如整型、实型、字符串等。

parameter 基本语法

parameter type parameter_name = default_value; 

或者省略类型,让编译器自动推断:

parameter parameter_name = default_value; 

parameter 示例

module adder #( parameter integer DATA_WIDTH = 8 // 定义参数DATA_WIDTH,默认值为8 ) (input logic [DATA_WIDTH-1:0] a, b, // 使用参数设置输入端口宽度 output logic [DATA_WIDTH-1:0] sum // 使用参数设置输出端口宽度 ); // 实现一个DATA_WIDTH位的加法器 assign sum = a + b; 
endmodule // 在实例化时使用默认参数 adder adder_instance1 ( .a(a_signal), .b(b_signal), .sum(sum_signal)); // 在实例化时重载参数,将DATA_WIDTH设置为16 adder #(.DATA_WIDTH(16)) adder_instance2 ( .a(a_signal), .b(b_signal), .sum(sum_signal) ); 

在这个例子中,adder模块定义了一个名为DATA_WIDTH的参数,其默认值为8。当你实例化adder模块时,你可以接受这个默认值,也可以提供一个新的值来重写它。这样,你就可以根据需要创建不同位宽的加法器实例。

局部参数

除了parameter,SystemVerilog还提供了localparam关键字,用于定义不可更改的局部常量。

localparam type localparam_name = constant_value; 

localparam定义了一个局部常数,这个常数不能在模块实例化时被重写,用于内部模块展开或计算,而不打算作为模块的配置接口。

局部参数示例

在这里插入图片描述
在这个例子中,MAX_VALUE被定义为一个localparam,用于确定计数器的最大值,它内部使用,不可从外部更改。这样可以确保模块的行为在设计阶段被固定,并且在不同的实例化中保持一致。

状态机代码实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

VCS 仿真结果

在这里插入图片描述

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

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

相关文章

c语言--指针数组(详解)

目录 一、什么是指针数组?二、指针数组模拟二维数组 一、什么是指针数组? 指针数组是指针还是数组? 我们类比一下,整型数组,是存放整型的数组,字符数组是存放字符的数组。 那指针数组呢?是存放…

idea中git提交代码出现:commit and push checks failed

参考:https://blog.csdn.net/qq_46548855/article/details/126506747

使用dbeaver导入Excel到mysql数据库

最近业务需要将Excel导入到mysql数据库中,之前一直用的heisql,但是heidisql的导入功能太弱了,后来用了dbeaver,功能很强大。 一、安装dbeaver 首先去官网下载dbeaver社区版,社区版免费:dbeaver.io/ dbea…

《MySQL 简易速速上手小册》第2章:数据库设计最佳实践(2024 最新版)

文章目录 2.1 规划高效的数据库架构2.1.1 基础知识2.1.2 重点案例2.1.3 拓展案例 2.2 数据类型和表设计2.2.1 基础知识2.2.2 重点案例2.2.3 拓展案例 2.3 索引设计原则2.3.1 基础知识2.3.2 重点案例2.3.3 拓展案例 2.1 规划高效的数据库架构 在开启我们的数据库设计之旅之前&a…

牛客——牛可乐的翻转游戏(状压,dfs)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 牛可乐发明了一种新型的翻转游戏! 在一个有 nnn 行 mmm 列的棋盘上,每个格子摆放有一枚棋子,每一枚棋子的颜色要么是黑色,要么是白色。…

C语言:函数

创作不易,友友们给个三连吧!! 一、函数的概念 数学中我们见过函数的概念,例如ykxb,k和b都是常数,给任意一个x就可以得到y 而C语言也引入了函数(function)这个概念,C语…

Java学习16-- 面向对象学习45. 面向对象三大特征抽象类和接口

面向对象学习4. 面向对象三大特征 1封装:高内聚(内部细节自己用,外部不能介入),低耦合(保留很少接口给外部使用),信息隐藏(禁止外界直接访问内部数据(private),如需要,可通过get/set接口访问&a…

1Panel面板如何安装并结合内网穿透实现远程访问本地管理界面

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、…

springboot项目热部署实现(Spring Boot DevTools方式)

文章目录 Spring Boot DevTools简介Spring Boot DevTools原理spring Boot Devtools优缺点Spring Boot DevTools集成步骤第一步:添加maven依赖第二步:IDEA热部署配置 Spring Boot DevTools简介 Spring Boot DevTools是Spring Boot提供的一个开发工具&…

机器人运动学林沛群——变换矩阵

对于仅有移动,由上图可知: A P B P A P B o r g ^AP^BP^AP_{B org} APBPAPBorg​ 对于仅有转动,可得: A P B A R B P ^AP^A_BR^BP APBA​RBP 将转动与移动混合后,可得: 一个例子 在向量中&#xff…

【JS】基于React的Next.js环境配置与示例

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍基于React的Next.js环境配置与示例。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下…

Cuda编程注意小事项

1、函数执行空间标识符 用__global__修饰的函数称为核函数,般由主机调用,在设备中执行。如果使用动态并行,则也可以在核函数中调用自己或其他核函数。用__device__修饰的函数称为设备函数,只能被核函数或其他设备函数调用,在设备…