Featured image of post 北航CO上机初体验

北航CO上机初体验


花了好几个小时总算把个人博客搭好了。至于为什么要搭这个博客,只能说人终究是从众的生物,当你看到那么多6系大佬都有自己的博客,难免会想着自己搭一个。

此外,有一说一昨天的CO上机真是一场灾难

考试机制

每周的考试让人回忆起高中的峥嵘岁月,CO作为北航精品课程,处处都体现出了不同于其他课程的威压:

  • 在新北地下机房上机,禁止携带电子设备,校园卡验明真身
  • 只能使用学校机房电脑(这意味着不能使用任何电子资料)
  • 机房电脑手感极度糟糕1
  • 电脑自带程序相当有限,我的vscode上配置了基础的C环境,有verilog插件和Markdown插件,然而听有些人说他们的vscode连verilog插件都没有,语法不熟悉就直接寄

这次的考试机制是总时长三小时,其中前两个小时纯自己做,最后一个小时发出提示文件,还可以向助教提问,三道题都AC之后可以点击交卷,随后助教就会过来提几个问题(然而我因为交卷太晚助教让我直接走),结束之后就可以离开了。令人惊讶的是这次上机只要在三个小时内AK,课程平台上就一律算通过,于是像我这种三道题全是最后一小时AC的大混子也有个通过标。

alt text

第一题

第一题是一道logisim的MOORE状态机的题目,要求根据输入的不同切换数列的递推方式,这一构造没有什么难度,只要用一个额外的寄存器存储前n项和的值即可。然而这一题最大的难点在于——同步复位。

属于是COpre魅力时刻了,因为COpre上根本没有涉及到同步复位的设计方法,我们之前做的题全部都是异步复位。于是我的设计过程是这样的:

  1. 首先使用异步复位,即直接把reset信号练到寄存器的复位端,四个测试点过两个
  2. 重新审题,发现需要使用同步复位,经过短暂思考,决定把clk信号和reset信号与门连接在一起,合成同步的reset信号,然后接到寄存器的复位端。四个测试点过三个
  3. 然后我就卡住了(允悲)

所以问题出在哪呢?原来是因为使用与门会导致毛刺的出现,因为延时的问题,导致clk上升沿到达寄存器和clk和reset的与到达寄存器的时间有了微妙的差异,于是就会出现先正常更新一次数据再突然复位的错误现象。

那么这个问题如何解决呢?答案是直接放弃寄存器的复位端。直接使用MUX,以reset为选择信号,reset为0时正常输入,为1时则输入初始值。这样就保证复位一定是在clk上升沿进行了。


先写到这里,这是第一篇博客,先push一下看看显示正常不。 OK,没问题,但是我要写P0课下了,暂时先到这里 好的,这一等就是一个星期,现在是10月1号下午五点,我正在高铁上。昨天已经把P0课上考完了。

第二题

第二题是verilog的一道非常基础的题目。几乎只是对基础语法的一个考查。整个算法只涉及一个简单的循环,如果使用vscode插件的话基础语法的正确性也有保障。然而我依然耻辱地在这一题卡了四十分钟,因为我把阻塞赋值和非阻塞赋值搞混了。

这确实非常不应该,因为阻塞赋值和非阻塞赋值也是COpre重点描述的内容,然而我并没有认真看(允悲)。因此我对这两东西的印象就停留在always里面用非阻塞赋值,外面的就用阻塞赋值。然而事实并非如此。事实上直到现在我也没完全弄清楚(这周实在是太摆烂了),不过我的印象也升级为了组合逻辑一定用阻塞赋值(包括always @(*)内的语句,时序逻辑才用非阻塞赋值)

第三题

第三题与第二题定位类似,是一道极为基础的MIPS题目,代码只涉及简单的循环,条件判断。考虑到mars的help是三款软件中最简单易懂的(写语句的时候直接把意思都标出来,他真的我哭死),只要COpre学会了就不会有问题。

总结

总而言之这次CO上机确实是非常简单,然而正是因为它太简单才显得我在考场被卡住的样子更加狼狈。不过事后我发现周围的人情况都跟我类似,大概这是第一次上机的普遍现象吧。


  1. 黏糊糊,且有奇妙拖拽感的鼠标,不知为何看起来很不清晰的显示屏,敲起来完全不跟手的键盘…… ↩︎

使用 Hugo 构建
主题 StackJimmy 设计