[计算机软件及应用]代码编写技术.ppt

  1. 1、本文档共89页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[计算机软件及应用]代码编写技术

* * if-else * * case * * 内容提要 基本编码方法 可移植编码 时钟和reset信号处理 可综合编码 可综合划分方法 存储器 * * 代码编写时针对综合的模块划分规则与技巧 关于芯片级的模块划分 * * * * * * 关于核心逻辑的模块划分 在对核心逻辑进行模块划分时,要避免子模块间出现连接用的胶合逻辑。 * * * * * * 采用寄存器锁存输出 * * 采用寄存器锁存输出 对设计中每一个模块都采用寄存器锁存输出是模块设计时最基本的方法 目的在于使得每个子模块输入信号的输入延迟和输出信号的驱动强度都是可以预测的 * * 尽可能把相关的组合逻辑集中到一个模块中处理 * * 按照不同优化目的进行模块划分 * * 按照不同优化目的进行模块划分 * * 同步 异步模块 同步 异步逻辑的划分 多时钟域的处理 单独的跨时钟域模块 * * 算术资源模块单独划分出来 * * 算术资源模块单独划分出来 * * 内容提要 基本编码方法 可移植编码 时钟和reset信号处理 可综合编码 可综合划分方法 存储器 * * 带有存储器的设计 * * 带有存储器的设计 将存储器接口管脚放置于IP核的顶层 方便选择存储器的实现、接口和调试 * * 激励的生成 * * 时钟信号的激励生成 (1) always #(PERIOD/2) clk=~clk; 要注意clk初始化的问题,否则永远是X! * * 时钟信号的激励生成 (2) always begin #PERIOD/2 clk=1’b0; #PERIOD/2 clk=1’b1; end * * 避免激励波形之间的竞争 结论:测试向量中的输入信号最好由测试向量的clk激励生成,从而通过同步机制避免各个激励波形的时序竞争。 * * 后仿真 Quartus生成vo,sdo文件 加入modelsim的project,再把220model.v、altera_mf.v和 cyclone_atoms.v拷贝到你要编译的文件所在的文件夹里。先编译这两个文件,等于是把altera的器件加到了work这个library里。然后再在library下编译你要用的文件就可以了。这样方便些。 最后加入sdf文件,后仿真 * * IP核的仿真 同前,需要有相应的元件库的编译建立过程 功能仿真时也需要这样的元件库 * * * * 常量赋值的优点 常量对于一个设计具有灵活性 常量只需要在一个地方来修改 便于编译器发现错误 * * 内容提要 基本编码方法 可移植编码 时钟和reset信号处理 可综合编码 可综合划分方法 存储器 * * 时钟和reset信号处理 理想的时钟结构 * * 理想的时钟结构 * * 避免使用混合时钟沿 避免同时使用上升沿和下降沿采样的寄存器 占空比问题 * * 使用混合时钟沿 * * 避免使用门控时钟 门控时钟的概念 一种和工艺和时序相关的电路 产生时钟错误或产生时钟毛刺 引起寄存器在错误数据下被触发 * * 避免在模块内部产生时钟 可测性限制 属于门控时钟 * * 设计顶层产生门控时钟 * * 门控时钟信号的同步 门控时钟信号作为赋值使能信号同步输入 * * Poor coding style: assign clk_pl = clk pl_gate; always @(posedge clk_pl) begin … end * * Recommended coding style: always @(posedge clk) begin if (pl_gate = 1’b1) begin … end end * * 复位信号的设计 确保模块内部的寄存器只受一个简单RESET信号的控制 条件reset信号 避免在模块内部产生reset信号 创建一个独立的条件reset产生逻辑模块 * * 分离条件reset逻辑 poor coding style always@(posedge clk or posedge rst or posedge a) begin if (rst || a) … else … end end * * 分离条件reset逻辑 recommanded coding style assign z_rst = rst || a //in the main module always @ (posedge clk or posedge z_rst) begin if (z_rst) reg_sigs = 1 b0;

文档评论(0)

skvdnd51 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档