Verilog-A模块之64BIT随机序列产生
1bit的随机序列产生器可以用ahdl库里的rand_bit_stream就可以了
按照ahdl库的用法改了一个64bit的随机序列
如果需要产生一个随机电压,那么只需要在这个后面接一个理想DAC即可
代码如下,当作抛砖引玉之作:
(使用时记得改参数)
`include "discipline.h"
`include "constants.h"
//--------------------
// rand_bit_stream
// - Random bit steam generator
// vout: [V,A]
// INSTANCE parameters
// tperiod = period of stream [s]
// seed = random number seed []
// vlogic_high = output voltage for high [V]
// vlogic_low = output voltage for low [V]
// tdel, trise, tfall = {usual} [s]
// MODEL parameters
// {none}
// This model generates a random steam of bits.
(* instrument_module *)
module RANDOM_64BIT (vout);
output [63:0] vout;
electrical [63:0] vout;
parameter real tperiod = 1 from (0:inf);
parameter integer seed = 21;
parameter real vlogic_high = 1;
parameter real vlogic_low = 0 ;
parameter real tdel=0 from [0:inf);
parameter real trise=1n;
parameter real tfall=1n;
real next;
integer bit;
real vout_val [0:63];
integer iseed;
genvar i ;
analog begin
@ ( initial_step ) begin
next = $abstime + tperiod;
bit = 0;
iseed = seed;
for(i=0; i<64; i=i+1) begin
vout_val[i] = vlogic_low;
end
end
$bound_step(tperiod);
@ ( timer( next )) begin
for(i=0; i<64; i=i+1) begin
bit = abs($random(iseed)) & 1;
vout_val[i] = (vlogic_high - vlogic_low) * bit + vlogic_low;
end
next = next + tperiod;
end
for(i=0; i<64; i=i+1) begin
V( vout[i] ) <+ transition(vout_val[i],tdel,trise,tfall);
end
end
endmodule