[水] 活用Verilog中的Generate功能

前几天猛然发现自己的网站已经挂了,在法师帮助下修好之后意识到自从6月毕业以来就基本没再发过什么东西。当然主要还是因为自己作为失学儿童这段时间把精力放到补习基础知识和生活技能上去了…

言归正传,作为存活证明,今天来聊聊Verilog里Generate这功能。虽然我一直不是很喜欢Verilog,因为这个语言相比于VHDL去除了很多对可读性有较大帮助的功能,同时仍然很啰嗦:阅读OpenSparc的代码几乎让我吐了出来,每个模块所实现的逻辑很简单,但这些逻辑却被埋没在海量的胶水代码里了……吐槽放一边,由于传播和交流上的方便,Verilog仍然是现在最流行的语言,尤其是在国内。虽然一些如Bluespec这样的语言已经大大改善了Verilog的别扭之处,很多时候还是直接用Verilog比较顺手。为了写出更漂亮的,更有复用性的代码,能把Generate和System Task/Function (以后有机会再说)这样强有力的武器用起来就再好不过了。

国内网站上似乎没有太多实际使用的例子,可能主要还是因为大部分博文关注的还是更高级的功能组合的实现过程。而Generate这个功能通常是在一些比较底层的地方使用,用来减轻重复敲代码的麻烦。最重要的是它可以很轻松地实现一些参数化设计(Parameterized Design)。我曾经见过有人在Virtuoso里徒手画了一个32位的独热码转二进制电路,这个工作量想想就很不健康……如果换作Generate,这样的电路可以仅用数行代码就实现。

Continue reading "[水] 活用Verilog中的Generate功能"

HDSP2000点屏

占着坑,这周末把它写了,下周直接拿去水数字系统课作业((

前言

简单来说动机是这样的:这学期我们有一门数字系统设计的课:每个人发了FPGA实验板子(Ego1 ,芯片是Aritx7系列的),结合实验一起讲Verilog语言。不幸的,我们班80多人,只有我一个没有领到板子。那我就有理由好好用一把自己吃灰已久的XUPV5了不是(x

此前做过一些FPGA开发,也一直停留在做超小系统的级别(比如那个至今没时间填完坑的HP35复刻)。我意识到自己的问题不是说不会用还是怎么的,主要是懒和过度担心,有些时候有些问题明明是安静写那么一段时间就能写出来的,我却经常选择回避或者单纯的kill time,不干正事。现在我感觉有必要给自己找些小模块,花几个小时硬逼自己一个一个一口气不中断地写完,作为练习。

这次我们留了一个作业,基本还是在教同学们怎么用case写查找表,最终来驱动一组段码LED。我的开发板上并没有段码LED,而且我觉得如果我也做一个段码LED那就太无聊了,不如设计一个比较精致的HP字符LED屏控制器,然后再画一个PCB,做成XUPV5上那个LCD模块的形状,将它替代掉?

Continue reading "HDSP2000点屏"