ASIC-WORLD Verilog(17)参数化模块设计

写在前面

        在自己准备写一些简单的verilog教程之前,参考了许多资料----Asic-World网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加点自己的理解)分享给大家。

        这是网站原文:Verilog Tutorial

        这是系列导航:Verilog教程系列文章导航


介绍

        假设现在要设计一个能兼容不同宽度、但具有相同的功能的计数器。也许我们可以假设我们的设计需要大量具有相似功能的不同深度和宽度的 RAM。通常我们所做的是创建不同宽度的计数器,然后使用它们。同样的规则也适用于我们讨论的 RAM。

        但是Verilog提供了一种强大的方法来克服这个问题:它为我们提供了一种叫做参数(parameter)的东西;这些参数就像该特定模块的本地常量。

        我们可以使用 defparam 或在实例化期间传递一组新参数来覆盖默认值。我们称其参数覆盖(parameter overriding)。

参数(Parameters

        Verilog 将参数定义为在模块结构中声明的常量值。该值可用于定义模块的一组属性,这些属性可以表征其行为及其物理表示。

  • 在模块内部定义
  • 局部范围
  • 可以在实例化时被覆盖
    •  如果定义了多个参数,则必须按照定义的顺序覆盖它们。如果未指定覆盖值,则使用默认参数声明值
  •   可以使用 defparam 语句进行更改

实例化时的参数传递

module secret_number;
parameter my_secret = 0;

initial begin
  $display("My secret number in module is %d", my_secret);
end

endmodule
 
module param_overide_instance_example();

secret_number #(11) U0();
secret_number #(22) U1();
  	 
endmodule

使用defparam进行参数传递

module secret_number;
parameter my_secret = 0;

initial begin
  $display("My secret number is %d", my_secret);
end
  	 
endmodule
 
module defparam_example();
  	 
defparam U0.my_secret = 11;
defparam U1.my_secret = 22;
  	 
secret_number U0();
secret_number U1();
  	 
endmodule

传递多个参数

module  ram_sp_sr_sw ( 
clk         , // Clock Input
address     , // Address Input
data        , // Data bi-directional
cs          , // Chip Select
we          , // Write Enable/Read Enable
oe            // Output Enable
); 

parameter DATA_WIDTH = 8 ;
parameter ADDR_WIDTH = 8 ;
parameter RAM_DEPTH = 1 << ADDR_WIDTH;
// Actual code of RAM here

endmodule

         当实例化多个参数时,参数值应按照在子模块中声明的顺序传递。

module  ram_controller ();//Some ports

// Controller Code
 
ram_sp_sr_sw #(16,8,256)  ram(clk,address,data,cs,we,oe);
 
endmodule

Verilog 2001

        在 Verilog 2001 中,上面的代码可以工作,但新功能使代码更具可读性且无错误。

module  ram_controller ();//Some ports
 
ram_sp_sr_sw #( 
	.DATA_WIDTH(16), 
	.ADDR_WIDTH(8), 
	.RAM_DEPTH(256))  ram(clk,address,data,cs,we,oe);
 
endmodule

        这是学的VHDL?


  • 📣您有任何问题,都可以在评论区和我交流📃!
  • 📣本文由 孤独的单刀 原创,首发于CSDN平台🐵,博客主页:wuzhikai.blog.csdn.net
  • 📣您的支持是我持续创作的最大动力!如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤独的单刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值