写在前面
当我们在小规模的Verilog书写的过程中,每一个模块的功能都是很明确的,也不需要什么分工,比如常见的分频流水灯或者是七段数码管的使用,每一个模块的构思都是很简单的,但在实际中Verilog可不仅仅是写这些小玩意,当形成一个大型状态机——CPU,还是其他的大型项目,模块多起来了就会变得十分棘手。那么当我们遇到一个相对比较大的Verilog项目时,我们应该怎么处理呢?
一些建议
我们一般有几种常见的构思方式,比如从一个个小模块开始,然后构思整体的框架,或者是自顶向下。一般来说自顶向下的方式是最合理的,因为这样能更好的处理好每一个模块的分工。
然后就是要搞清楚Verilog的一些重点:
多模块对同一个变量进行赋值不成立
每一个模块是并行的,而不是像其他高级编程语言一样,属于上面的语句执行完了才开始执行下面的语句(if-else除外)
然后,我们就可以开始进行分工了。
题目描述
在一块板子上,用8位拨码开关和5个按键开关,以及8个七段数码管实现如下记忆小游戏:(直接白嫖指导书了)
- 系统在开机上电或按下复位键(按键S4)时,数码管显示8个“0”,然后等待按键S0被按下;
- 按键S0按下后,系统开始生成数字。此时,系统将生成5个互不相同的5位八进制数,并将这5个数存储起来,同时以1s为时间间隔,在数码管上将这5个数播放一次。例如,假设系统生成了12345、76543、07264、17531和44444,此时需要先在数码管DK[4:0]上显示12345,隔1s后显示76543,再隔1s后显示07264,⋯⋯,最后显示44444,再隔1s后数码管显示保持不变;此时,等待按键S1被按下;
- 要求(2)中生成的5个5位