|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
from internet
这能使用在 HSPICE 吗 ?
==
`define DATA_BITS 8
`define ADDR_BITS 8
// module ram_va(READ_NWRITE, ADDR, CE, DATA, REF, Qb);
module ram_va( Q, CLK , CEB ,READ_NWRITE, ADDR, DATA);
input READ_NWRITE, CEB, CLK;
input [`ADDR_BITS-1:0] ADDR;
input [`DATA_BITS-1:0] DATA;
output [`DATA_BITS-1:0] Q;
electrical READ_NWRITE, CEB;
electrical [`ADDR_BITS-1:0] ADDR;
electrical [`DATA_BITS-1:0] DATA;
electrical [`DATA_BITS-1:0] Q;
//electrical REF;
parameter integer MEM = (pow(2,`ADDR_BITS)*`DATA_BITS);
parameter real vth = 0.9;
parameter real dig_v = 1.8;
integer addr_aux;
integer ce_aux, r_nw_aux;
integer data_aux_in[`DATA_BITS-1:0]; //it's the value read from the input port DATA
integer data_aux_out[`DATA_BITS-1:0]; //it's the value assigned to the output port Q
integer k, bit, i, m;
integer memory[MEM-1:0];
analog begin
ce_aux = 0;
r_nw_aux = 0;
addr_aux = 0;
bit = 0;
generate i(`DATA_BITS-1, 0) data_aux_in = ((V(DATA) > vth) ? 1: 0); // data_aux_in = DATA
generate i(`ADDR_BITS-1, 0) addr_aux = addr_aux +((V(ADDR) > vth) ? 1 << i:0); // addr_aux = ADDR
r_nw_aux = (V(READ_NWRITE) > vth) ? 1:0; // r_nw_aux = READ_NWRITE
ce_aux = (V(CEB) < vth) ? 1:0; // ce_aux = CE
for (k=addr_aux*`DATA_BITS;k<=(((addr_aux+1)*`DATA_BITS)-1);k=k+1) begin
if ((r_nw_aux==1)&&(ce_aux==1)) begin
data_aux_out[bit] = memory[k];
bit = bit+1;
end else if ((r_nw_aux==0)&&(ce_aux==1)) begin
memory[k]= data_aux_in[bit];
data_aux_out[bit] = 0.1n;
bit = bit+1;
end else begin
data_aux_out[bit] = 0.1n;
bit = bit+1;
end
end
generate i(`DATA_BITS-1, 0) V(Q) <+ data_aux_out * dig_v;
end
endmodule |
|