Featured image of post 北航CO_P0课上——logisim的基础运用

北航CO_P0课上——logisim的基础运用


昨天晚上进行了计组P0的上机,他不是普通的上机,是国庆前夜的上机,是计组第一次影响分数的上机,这里除了6系牛马,没人配与他单挑。

在去之前,我是十分焦虑的。这主要是北航CO的低容错所致:

  • 课程总计5.5学分,分为理论和实验两部分,其中实验部分占比超过2学分
  • 实验部分以课上为主,课上部分采取闯关制,只有通过前面的关卡才能继续挑战后面的关卡。例如你P5挂了,下一次上机别人做P6,你还是做P5,而且你并不是接着上一周的进度做,助教出了全新的三道题(快说谢谢助教),要是这次还不过,那下次继续
  • 根据往届的说法,前几次上机通过的要求都是AK,必须三道题全过,后面则会变成过两道即算通过
  • 上机难度通常不低,即使是那些公认的往届大佬都有不少挂过

不过课程组也知道不能太为难学生,所以还是有一些保护措施,比如前几次上机不做卡关设置,没过也允许做后面的内容(我觉得这可能跟前几次上机不涉及迭代开发有关)。此外,据说再过几周会有一次整体的容错关,大家一起停一周,全过的同学无事可做,剩下的同学可以追一次进度。相当于提供了挂一次的容错。

但是毫无疑问,即便如此上机依然是一个让人无比焦虑的事情,想想看,可能一个思路没转过来,就挂了一次上机,然后直接被大部队甩开,要是在同一关挂两次以上,那简直重开的心都有了。

幸运的是,这次的P0是一个纯粹的奖励关

情况

我们寝室四个人都在开考后四十分钟至一个小时间AK交卷。同时,我交卷的时候仅我所在机房就有二十几个人排队在我前面等待签退,可见课程组发自内心的想让我们度过一个快乐的国庆

而且我们还发糖吃了,win。

第一题

一道非常简单的组合逻辑的题目。要求计算一个四位四进制数的逆序数。

在n个数码1,2,…,n的全排列j1j2…jn中,若一个较大的数码排在一个较小的数码的前面,则称它们构成逆序,这个排列的所有逆序的数量,称为这个排列的逆序数,记为τ(j1j2…jn)或π(j1j2…jn)。例如,在四个数码的排列3142中,3与1,3与2以及4与2都构成逆序,因此τ(3142)=3。逆序数为奇数的排列称为奇排列,逆序数为偶数的排列称为偶排列。

这道题的思路连小学生看了上面的定义都知道,只需要从前往后依次比较六次,每次出现前大于后时加一即可。唯一可能需要注意的点就是比较器要设置为unsigned。

第二题

一道非常简单的MOORE状态机的题目,只需要根据指令对两个寄存器进行简单的运算,00不变,01加1,10减1,11置0。有一个输入信号决定操作哪个寄存器。唯一需要注意的是操作一个寄存器时要保证另一个不变,这一点用使能端实现即可。

第三题

一道简单的MOORE状态机的题目,需要输出由“0-9,a-f”构成的最长严格递增后缀子串的长度。

例如,串abcdefg的后缀子串包括g,fg,efg,defg,cdefg,bcdefg,abcdefg。若一个后缀子串满足每一个数都比之前的数大,则称其为严格递增后缀子串。

我的方法是使用两个寄存器,一个存储上一个数的值,另一个存储最长严格递增后缀子串的长度。状态更新非常简单,略而不表。

使用 Hugo 构建
主题 StackJimmy 设计