欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【Verilog HDL】从逻辑电路图到门级建模——人工翻译的方法论

发布时间:2023/11/30 编程问答 61 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【Verilog HDL】从逻辑电路图到门级建模——人工翻译的方法论 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

从左到右,从上到下
先搞定缓冲/非门,再写与/或门

1. 实例解读

先以四选一数据选择器进行说明

对于数字逻辑的部分不再说明,直接进行逻辑电路图到Verilog门级建模的人工翻译过程的描述。

1.1 端口和线网分析

  • 确定输入/输出端口
    • 输入端口
      • 数据端:i0,i1,i2,i3
      • 控制端:s1,s0(小端序写法,高字节在高位)
    • 输出端口:
      • 数据端:out
  • 确定子模块内部线网
    • 非门类:s1n,s0n
    • 与门类:y0,y1,y2,y3

至此,可以翻译的部分为:

module mux4_to_1 ( // 四选一数据选择器模块input i0,i1,i2,i3,input s1,s0,output out);// 设置内部线网wire s1n,s0n;wire y0,y1,y2,y3;<其他> endmodule
【疑问】为什么内部线网用wire而不用寄存器reg?

继续从端口连接规则——污水处理模型来谈及,我们

  • 把wire比作无阀门水管
  • 把reg比作双阀门水管
  • 把设计块的设计过程,比作水管与其他器件的连接过程(此时是没有通水的)
  • 把激励块的设计过程,比作管道通水,以测试连接的正确性

1.2 器件分析

器件分析的顺序:

对于左边输入,右边输出的逻辑电路图来说:

  • 缓冲门/非门单独拎出来
  • 从左到右
  • 从上到下

因此,有如下器件翻译顺序

  • 非门2个
  • 与门4个
  • 或门1个

给出如下代码片(非完整代码)

// 连接门电路 not (s1n,s1); not (s0n,s0);// 【特别注意】以下部分的s1,s0的写法是有规律的,背着写就可以 and (y0,i0,s1n,s0n); // 0,0 and (y1,i1,s1n,s0); // 0,1 and (y2,i2,s1,s0n); // 1,0 and (y3,i3,s1,s0); // 1,1or (out,y0,y1,y2,y3);

1.3 完善的设计块

module mux4_to_1( // 1位 四选一数据选择器input i0,i1,i2,i3,input s0,s1,output out);// 声明内部线网wire s0n,s1n;wire y0,y1,y2,y3;// 门级建模not (s0n,s0);not (s1n,s1);and (y0,i0,s1n,s0n);and (y1,i1,s1n,s0);and (y2,i2,s1,s0n);and (y3,i3,s1,s0);or (out,y0,y1,y2,y3);endmodule

2. 总结:门级建模的翻译方法

对于设计好的逻辑电路图来说,有这样的方法进行翻译,这种方法会让你翻译出来的门级描述逻辑清晰严谨

2.1 前提条件

  • 逻辑电路图的设计,是数字逻辑课程的内容,这里不讲
  • 逻辑电路图需要是优化的,也就是应用层级建模方法设计出来的,而不是很乱的一堆电路图。
    • 例如:设计一个四位全加器,需要首先设计出来一个一位全加器,在这里,一位全加器的逻辑电路图和四位全加器的逻辑电路图是两张图,并且四位全加器直接应用一位全加器的实例

2.2 具体方法

对于某一个子模块的设计来说:

  • 先确定端口
  • 再确定内部线网
  • 再确定需要的逻辑门
    • 先缓冲门/非门,再与/或门
    • 从左到右,从上到下(左边输入,右边输出)

总结

以上是生活随笔为你收集整理的【Verilog HDL】从逻辑电路图到门级建模——人工翻译的方法论的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。