当前位置: 首页 > news >正文

制作单页网站教程视频河南省信息服务平台官网

制作单页网站教程视频,河南省信息服务平台官网,网站建设 页面,品牌建设论文参考文献Verilog基础语法——parameter、localparam与define 写在前面一、localparam二、parameter三、define写在最后 写在前面 在使用Verilog编写RTL代码时#xff0c;如果需要定义一个常量#xff0c;可以使用define、parameter和localparam三种进行定义与赋值。 一、localparam … Verilog基础语法——parameter、localparam与define 写在前面一、localparam二、parameter三、define写在最后 写在前面 在使用Verilog编写RTL代码时如果需要定义一个常量可以使用define、parameter和localparam三种进行定义与赋值。 一、localparam localparam是一种局部常量只在声明该常量的模块中有效不可用于模块与模块之间的参数传递。一般在定义仅用于模块内部的参数时使用localparam比如状态机状态的定义声明。例如 // FSM Sate localparam IDLE 4b0001; localparam INPUT 4b0010; localparam DECODE 4b0100; localparam COMPLETE 4b1000;// FSM always (posedge clk or negedge rst_n) beginif(!rst_n) begincurr_state IDLE;//...endelse begincase(curr_state) IDLE:beginif(start)curr_state INPUT;elsecurr_state IDLE;//... endINPUT :begincurr_state DECODE;//...endDECODE : begincurr_state COMPLETE;//... endALL_COMPLETE:begincurr_state IDLE;enddefault :;endcaseend end二、parameter parameter与localparam相同的是其作用范围仅仅是声明该参数的模块内部而不同的是parameter可以用于模块之间的参数传递一般用于参数化设计。参数化设计是指对于所设计的功能子模块通过修改其内部参数值即可使得该模块适用于其他场景。   这里parameter可以分为在模块头部中声明与在模块内部定义声明两种定义方式需要不同的方式来进行参数传递。 1在模块头部中定义   在模块头部中定义参数是一种常用的做法其格式如下 module counter #(parameter CNT_NUM 8d128 ,parameter DIN_WIDTH 4d8 ,parameter DOUT_WIDTH 5d16 ) (input wire [DIN_WIDTH-1:0] din , output wire [DOUT_WIDTH-1:0] dout );// 模块内部代码// ...endmodule而在模块例化时需要与例化模块输入输出端口一样给参数接入不同的数值即可其格式如下 module top (// 输出输入声明// ... );localparam CNT_NUM 8d100;localparam DIN_WIDTH 4d6;localparam DOUT_WIDTH 5d12; wire [DIN_WIDTH-1:0] counter_din ; wire [DOUT_WIDTH-1:0] counter_dout;// 模块例化counter #(.CNT_NUM (CNT_NUM ), // 参数传递.DIN_WIDTH (DIN_WIDTH ), // 参数传递.DOUT_WIDTH(DOUT_WIDTH) // 参数传递)counter_inst(.din (counter_din ), .dout(counter_dout))// ...endmodule2在模块内部定义   在模块内部定义的paramter其格式如下 module counter (input wire [15:0] din , output wire [7:0] dout );parameter CNT_NUM 8d128 ;parameter DIN_WIDTH 4d8 ;parameter DOUT_WIDTH 5d16 ;// 模块内部代码// ...endmodule在上层模块的例化中可以通过defparam进行修改所例化模块中定义参数的值其格式如下 module top (// 输出输入声明// ... ) ;wire [15:0] counter_din ; wire [7:0] counter_dout;// 模块例化counter counter_inst(.din (counter_din ), .dout(counter_dout));// 格式// defparam 模块例化名称 参数名称 重新设定的参数值// 如果是多层嵌套子模块在模块3中例化模块2在模块2中例化模块1则格式为// defparam 模块3例化名称 模块2例化名称 模块1例化名称 参数名称 重新设定的参数值defparam counter_inst CNT_NUM 8d100;defparam counter_inst DIN_WIDTH 4d6;defparam counter_inst DOUT_WIDTH 5d12; endmodule这种方式的缺点在于该方式声明的parameter无法用于模块输入输出信号位宽的控制因为参数定义声明在模块的内部。 三、define 通过define定义的参数作用范围是整个设计工程文件遇到undef则失效其格式如下 define CNT_NUM 8d128 module counter (// 输出输入声明// ... )// 模块内部代码// ...endmodule也可以将所以define定义声明的参数放在一个单独文件中并在每个模块中使用include包含声明文件以作用于整个工程项目。其格式如下 // para_def.vh // 独立参数声明文件 define CNT_NUM 8d128 define DIN_WIDTH 4d6; define DOUT_WIDTH 5d12; 然后再每个模块的前面使用include包含该参数声明文件即可使用格式如下 // include 路径/参数声明文件名 include F/xxx/RTL/para_def.vh module counter (// 输出输入声明// ... )// 模块内部代码// ...// 使用格式参数名always (posedge clk) beginif(cnt CNT_NUM)elseendendmodule写在最后 在本文中我们学习了Verilog基础语法中三种不同的参数定义方式——localparam、parameter与define其中define定义的参数作用范围最广且支持用于模块之间的参数传递localparam作用范围仅为模块内部且不支持参数传递而parameter是两者的折中作用范围为模块内部但是支持参数传递。在实际代码编写过程中应选择合适的方式对不同参数进行声明使用时可以参考下表。 关键字适用场景localparam仅用于模块内部的参数且在不同场景下无需进行修改parameter仅用于模块内部的参数但是在不同场景下需要进行修改define整个工程文件中都会用到的参数 本文到此结束欢迎评论区交流探讨。
http://www.pierceye.com/news/88756/

相关文章:

  • 易语言做购物网站开发房地产需要多少钱
  • 怎么做刷qq业务网站网站怎么做响应
  • 订阅号做影视网站我想建网站做推广
  • 昆明医院网站建设网络工程师证书考试时间
  • 有哪些建设网站的越秀区建设水务局网站
  • 优质做网站费用有没有做生物科技相关的网站
  • mvc做网站企业管理咨询上班好吗
  • 欧美电影免费网站遂宁网站设计
  • 做网站 程序员 暴富渭南网站建设服务
  • html 网站开发网站建设的考虑
  • 做教育网站用什么颜色南京手机网站制作
  • 网站建设工作整改报告柳州建设网栗园新居
  • 手机网站开发设计动漫设计师资格证
  • 宝安网站建设制作搬家网站建设公司
  • 怎样建设一个英语网站建设培训网站建设
  • 做网站主页效果图好多公司为啥只做网站 不考虑推广
  • 西城专业网站建设公司哪家好统计网站访客人数
  • 如何做全景网站网络营销策划书范文
  • h5技术网站所见即所得网站管理系统
  • 一站式营销型网站建设服务山西建筑工程集团有限公司
  • 会计证继续教育在哪个网站做免费企业管理培训课程视频
  • 百度广州给做网站公司wordpress输入正确密码无法登陆
  • 种子搜索网站怎么做的佛山网站建设计
  • 模板网站的建设wordpress博客常用插件
  • 南平做网站婚恋网站 备案条件
  • 西宁哪家网络公司做网站广告机
  • dede小视频网站源码专业网站建设制作公司哪家好
  • 做外贸英语网站国外网站做问卷
  • 山西省住房与城乡建设厅网站wordpress如何创建分类
  • 网站运营的具体工作包括哪些2015年做网站行不行