Verilog回忆

本文作者回顾了使用Verilog进行硬件设计的经历,包括实现逻辑课的大项目——硬件解24点游戏,以及在计算机组成课程中设计多时钟CPU的过程,涉及pipeline、状态机和解决Hazard问题。此外,还分享了在Xilinx ISE工具中遇到的挑战和调试经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在前天将41 instructions pipelined full forwarding cpu验收完成,写verilog的日子就算是告一段落了,很可能以后再也不会去动它了。在此,一来记录一下过去,二来,也给要写类似东西的人以启示。

初见Verilog

最初见到Verilog应该是在逻辑与计算机设计基础的实验课上见到,同时见到的还有FPGA板子和Xilinx ISE。最开始,我以为这课基本上是从理论到理论,接下来的计算机组成,那更是如此。因为,在此之前,我买过国内的一本计算机组成的书,它上面也有讲加法器,乘法器,除法器等等ALU部件,还有其他CPU部分,寄存器堆,内部总线,ISA等等。但是,它似乎没有让你去实现它的意思。理论很多,但是具体怎么实现,不知道。

最开始的时候,我们也只是用verilog写写,多路选择器,译码器,加法器,以及到后面稍微复杂时序电路。

当时,老师说,我们最终会实现一个cpu的时候,我开始对此有了小小的期待。(我不知道国内的其它学校他们是怎么上这课,还是从理论到理论吗?)

逻辑课的大程

在逻辑课快结束的时候,老师需要我们写一个大程。他对大程的要求是,要用VGA显示,要用到ram or rom,并且得有时序电路。他还给了一个例子,打乒乓球,应该是前些届学长做的。当时,不知怎么的,我想到了去做硬件解24点问题。此处应该算是缩减版的24点,首先,运算只能有+-*,4张牌,每一张都是0-15之内的一个值。主要原因是除法运算不是一个时钟周期可以完成的,做多周期的要复杂很多,每张只能是0-15也是为了简单起见,刚好4个bit。

软件24点

用软件和硬件实现24点都是十分类似。最根本的方法都是穷举法。我网上搜到的都是穷举法,应该还是有其他更快的方法的,但是即便是穷举也没有多少种。

括号的嵌套方式(其实也就是运算的顺序)总共有5种。(之后我们都认为+-*之间是没有优先级的,先算谁都是靠括号来的。)

  1. ((a+b)+c)+d
  2. (a+(b+c))+d
  3. a+((b+c)+d)
  4. a+(b+(c+d))
  5. (a+b)+(c+d)

对于给定的任一括号嵌套方式,我们都有3*3*3=27种运算符组合。

对于任一种括号嵌套和运算符组合,我们都有4!=24种安排4个数的顺序。

总的来说也就是,组合共有5*27*24=3240种。每种也就进行3次运算,所以总的运算量十分少,穷举也不是什么很糟糕的算法。

硬件24点

软件是串行的,硬件可是并行的。那不是什么多核或者是GPGPU的并行,而是比他们低层得多的,bit单位的并行。我当时的做法是,类似于外面套两层循环,第一层循环去枚举4个数字的排列情况,第二层循环去枚举运算符的组合,最里面并行的去计算5种括号嵌套方式。然后,找出其中一组最终值为24。

计组的多时钟CPU

计组的单时钟CPU怎么做的,我已经记得不太清楚了。但是,多时钟我还是记得比较清楚的。当时的那一次的4个人合作几乎是我大学里面最为成功的一次合作。不管是从分工,效率,过程,还是结果都非常的好。我是负责将另一个组员画好的图,用verilog拼起来。我用了4个小时,将它拼起来,并且又用了4个小时࿰

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值