在进行工程编译的时候,发现前人的verilog 代码function函数中,有带幂的操作,于是进行了学习。
(一)内容
一般使用操作符“** ”表示幂。
(二)用法
操作符两边放数字。
(三)表示的意义
如5**i表示5的i次幂。
工程具体例子
module sunshine(
input clk,
input rst_n,
output reg [31:0] a
);
parameter LOGN=clogb2(1024);
always@(posedge clk or negedge rst_n)
if(!rst_n)
a<=0;
else
a<=LOGN;
function [31:0] clogb2;
input [31:0] depth;
reg [31:0] i,result;
begin
for(i=0;2**i<depth;i=i+1)
result=i+1;
clogb2=i;//返回的结果是i,即求幂的逆计算
end
endfunction
endmodule
1024是2的10次方
下面是仿真源程序和仿真图
`timescale 1 ps/ 1 ps
module sunshine_vlg_tst();
// test vector input registers
reg clk;
reg rst_n;
// wires
wire [31:0] a;
// assign statements (if any)
shushine i1 (
// port map - connection between master ports and signals/registers
.a(a),
.clk(clk),
.rst_n(rst_n)
);
initial
begin
// code that executes only once
// insert code here --> begin
clk=0;
rst_n=1;
#200
rst_n=0;
#300
rst_n=1;
// --> end
$display("Running testbench");
end
always
// optional sensitivity list
// @(event1 or event2 or .... eventn)
begin
// code executes for every event on sensitivity list
// insert code here --> begin
#10 clk=~clk;
// --> end
end
endmodule