第十八章 例题
//[例 1]. 模数转换器 AD7886 仿真模型(虚拟模块)的设计:
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++
`timescale 100ps/100ps //定义时间单位和时间分辩度
module adc (nconvst, nbusy, data);
input nconvst; // A/D 启动脉冲 ST,即上图中
output nbusy; // A/D 工作标志,即上图中
output data; // 数据总线,从 AD.DATA 文件中读取数据后经端口输出
reg[7:0] databuf,i; // 内部寄存器
reg nbusy;
wire[7:0] data;
reg[7:0] data_mem[0:255];
reg link_bus;
integer tconv,
t5,
t8,
t9,
t12;
integer wideth1,
wideth2,
wideth;
//时间参数定义(依据 AD7886 手册):
always @(negedge nconvst)
begin
tconv =9500+{$random}%500; //(type 950ns, max 1000ns)Conversion Time
t5 ={$random}%1000; //(max 100ns) CONVST to BUSY Propagation Dlay
// CL = 10pf
t8 = 200; //(min 20) CL=20pf Data Setup Time Prior to BUSY
//(min 10) CL=100pf
t9 = 100+{$random}%900; //(min 10ns, max 100ns) Bus Relinquish Time After
//CONVST
t12 = 2500; //(type) BUSY High to CONVST Low, SHA Acquisition Time
end
initial
begin
$readmemh("adc.data",data_mem); //从数据文件 adc.data 中读取数据
i = 0;
nbusy = 1;
link_bus = 0;
end
assign data = link_bus? databuf:8'bzz; //三态总线
/*----------------------------------------------------------------------------
在信号 nconvst 的负跳降沿到来后,隔 t5 秒 nbusy 信号置为低,tconv 是 AD 将模拟信号转
换为数字信号的时间,在信号 nconvst 的正跳降沿到来后经过 tconv 时间后,输出 nbusy 信
号变为高。
--------------------------------------*/
always @(negedge nconvst)
fork
#t5 nbusy =0;
@(posedge nconvst)
1
- 1
- 2
- 3
前往页