热度 23
2016-3-8 16:03
1407 次阅读|
0 个评论
【学习目的】 ① 学习异步并行接口的读写时序操作,掌握异步并口的时序描述方法; ② 复习 inout 双向端口的 Verilog HDL 描述方法及仿真方法; ③ 掌握收 / 发双向通讯方式的仿真方法。 【异步并口的相关知识】 ( 1 )异步并口的应用及优缺点 并口的最大缺陷:拥有多路数据总线和地址总线,因为走线长度、用线材料存在差异,所以,当信号的频率提高后,会存在线路延迟不同的现象,从而造成各路信号到达目标端口的时间不同,导致信号出现大量的毛刺和不稳定。 其次,并口占用的 I/O 口多,且难以满足高频信号的传输要求。 因此,当信号频率很高的时候,往往从用的是串行传输的方式,而当频率较低时(只有数十兆赫兹时),可采用并口的传输方式。 ( 2 )写操作的时序图 图 1 写操作时序图 异步并口的异步是指主机不输出时钟信号给从机用作它们之间的通讯,异步并口的并口是指主 - 从机之间的数据线(此例为 16 根)和地址线有多根(此例为 8 根),且主 - 从机之间的数据交互是并行的。 如图 1 所示, cs_n 为异步并口的片选信号,低电平有效; rd_n 为读使能信号,低电平有效; we_n 为写使能信号,低电平有效; data 为数据总线,位宽为 16bit ; addr 为地址总线,位宽为 8bit 。 如图 1 所示,当 cs_n 为低电平时, FPGA 被主机片选中,当 FPGA 检测到 we_n 信号被拉低时,即进入到异步并口的写状态,数据通过 data 数据总线送入 FPGA ,并按照 addr 地址总线上的地址值将数据存放到指定存储空间上(如: RAM 、 FIFO 等)。 ( 3 )读操作的时序图 图 2 读操作时序图 图 2 为异步并口的读操作时序,当 cs_n 为低电平时, FPGA 被主机片选中,当 FPGA 检测到 rd_n 信号被拉低时,即进入到异步并口的读状态, FPGA 按照 addr 地址总线上的地址值从指定存储位置上将数据读出并送到 data 数据总线上,以供主机设备读走。 【代码实现】 异步并口虽然没有同步时钟信号,但是,也不能全用组合逻辑的方式来描述,因为时序逻辑具有更高的稳定性,能给数据采集留以充分的建立时间和保持时间,从而使得读 / 写操作能在数据稳定后稳定进行。而组合逻辑电路的输出是随输入信号的变化而实时变化的,若主 - 从机之间的信号稍不稳定,即会导致读 / 写操作的错误。 因此,本例依然采用时序逻辑电路为主的描述方式,将 cs_n 、 rd_n 、 wr_n 等输入信号采到 sclk 系统时钟域来,然后在系统时钟 sclk 的控制下有序地工作。当然,像这种异步时钟域会存在亚稳态的现象,因此,为了降低亚稳态发生的概率,我们采用“打节拍”的方式稳定输入的信号,统一用 sclk 系统时钟给输入信号多打两拍(延迟两个时钟周期)。 综合以上分析可知,本例要设计的代码应包含以下三个部分: (1) 用系统时钟 sclk 给输入信号多打两拍,稳定输入信号 ; (2) 异步并口的写操作模块 (从外部写入 FPGA 内部); (3) 异步并口的读操作模块(包含 inout 端口的输出操作) 。 【关于 inout 双向端口的描述与测试】 图 3 inout 双向端口测试模型 如图 3 所示,展示了本例所采用的测试模型,对于 FPGA 芯片来说, 异步并口的读操作就是数据输出,写操作就是数据的输入 ;而对于测试激励端来说,异步并口的写操作就是数据输出,读操作就是数据的输入。 因此,应将 FPGA 端的程序设计如下: inout tri data, // 双向数据总线 assign data = (cs_n_r ==1'b0 wr_n_r ==1'b1 rd_n_r ==1'b0) ? read_data : 16'hzzzz;// 读操作输出数据 对于写操作输入数据,则直接将 data 数据总线上的数据 送入给 FPGA 的寄存器。 而应将测试激励端的程序设计如下: tri data; reg data_reg; assign data = (wr_n==1'b0) ? data_reg : 16'hzzzz;// 写操作输出数据 对于读操作输入数据,则直接读取 data 数据总线上的数据即可。 【 Testbench 搭建】 ( 1 )声明建立时间、保持时间、数据采样时间以及读等待时间等延时任务,以便模拟异步并口的读写时序; ( 2 )读数据任务 ( 3 )写数据任务 ( 4 )仿真流程控制 【实验结果】 图 4 打节拍延时 60ns 图 5 建立时间、数据采集时间、保持时间 图 6 读等待时间 图 7 Transcript 窗口信息 图 8 仿真波形整体图