Verilog log2 函数

摘要:
使用系统函数$clog2()或自己编写函数。注意,这样的styleinput[$clog2-1-1:0]addra不能使用funclog2函数。应该可以更改样式。
使用系统函数 $clog2()
或者自己写一个function
注意,这样的style
input [$clog2(LEN+1)-1 -1:0] addra,
它用不了funclog2函数。换一种style应该就ok了。
module simple_dual_ram #(
  parameter SIZE  = 10,
  parameter LEN   = 1024
)
(
  input clka,
  input ena,
  input wea,
  input [$clog2(LEN+1)-1 -1:0] addra,//$clog2(8)=3; $clog2(9)=4
  input [SIZE-1:0] dina,
  input clkb, 
  input enb,
  input [$clog2(LEN+1)-1 -1:0] addrb,//
  output reg [SIZE-1:0] doutb
);

function integer funclog2; 
   input integer value; 
   begin 
     value = value-1; 
     for (funclog2=0; value>0; funclog2=funclog2+1) 
       value = value>>1; 
   end 
endfunction 

localparam TEST_LOG2 = funclog2(LEN);
reg [TEST_LOG2-1:0] r_test_log2;

reg [SIZE-1:0] r_data[LEN-1:0];
reg [$clog2(LEN+1)-1:0] r_cnt;//clog2(LEN+1)  clog2(1024+1) -> 11; LOG2(1023+1) -> 10

initial //cannot be synthesis
begin
  doutb <= {(SIZE-1){1'b0}};
  for(r_cnt=0; r_cnt<LEN; r_cnt=r_cnt+1)
    r_data[r_cnt] <= {(SIZE-1){1'b0}};
end

always@(posedge clka)
  if(wea&ena)
    r_data[addra] <= dina;
always@(posedge clkb)
  if(enb)
    doutb <= r_data[addrb];
endmodule

免责声明:文章转载自《Verilog log2 函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux系统的相关知识、常用命令及拓展、centos 7网卡配置android环境下的即时通讯下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQLServer中DataLength()和Len()两内置函数的区别

最近工作中遇到了个问题:在数据库中声明字段类型时char(4),但实际只存储了‘DCE’三个字母,程序中拼装以该字段作为key的Map中,会把‘DCE’+空格作为其Key,这样造成用没加空格的‘DCE’为key去取Value的值是取不出来的,结果是空。后来查看数据库字段类型才发现了问题所在。大家都知道,char和varchar的区别就在于一个是固定长度,一...