0%

MATLAB程序设计语言基础

一、变量与常量

1.1 常见数据类型

1.1.1 数值型数据

应当意识到,数值型数据概念的提出是与符号型数据想对应的,matlab一般存储数据为双浮点数,就势必造成存储和运算的误差,比如将 $\frac{1}{3}$ 存为 0.333333,更不要提 0 的模糊表示了。如果是整数的话,其实也会造成运算的误差,比如 5/2=2 的取整操作。所以准确的来说,运用数值型数据只能得到近似解,而不能得到解析解。而用符号型数据可以避免这个漏洞。

Read more »

一、分节分页

首先要把分界分页标识符调出来,这样方便排版,方法是“文件—选项—显示—显示所有格式标记”。
在这里插入图片描述
然后明晰一下分节分页的概念,分节指的是一种文章逻辑上的分割,用这种分割方式分割出的部分,可以具有不同的页眉,页脚,尾注。而对于分页来讲,只是物理层面的分割,一般的应用于比如封面,摘要,目录,参考文献的分割。

分节一般有两种,下一节连续,理论上来讲,下一节操作等价于连续分节符分页符,但是在实际操作过程中,下一页分节符会造成空白页的出现,为了避免麻烦,还是用连续分节符为妙。在写冯如杯的论文的时候,分节操作应该在进行其他操作之前做,因为其他操作有可能依赖于分节操作,比如制作目录,参考文献,制作页码页眉等。在这种论文中,一般分为三节,第一节包括封面,中英文摘要,目录,主要原因是区分页码。第二节部分包括正文和参考文献,第三部分是致谢,主要原因是参考文献的尾注引用问题。
在这里插入图片描述

二、样式

采用样式不是必须的,甚至在北航官方提供的文档中,都没有采用样式,而是对字体进行单独的设置。采用样式及一系列操作的原因其实代表着一种设计思想,即动态管理与自动化排版。采用这种思想可以使排版更加有效率,有条理,但是就我个人经验来说,因为冯如杯论文结构较为简单,而自动化排版学习较为复杂,要是时间紧,或者没师傅带,可以不学习这种知识,笔者自己就是因为学的半瓶子醋晃荡,导致了冯如杯差点没有参赛成功,而笔者的好朋友就采用了直接设置的方法,获得了一等奖好成绩。

Read more »

Verilog 语言细节

一、关于常量

1.1 负数

负数在verilog里是按照补码储存的,也就是说 $-2’b1 = 11$,但是需要注意的是,在比较的时候,是无符号的比较,也就是说 $-2’b1 > 2’b0$ 这个事情是对的。更离谱的是,$-2’b1 == 2’d3$ 这件事也是对的,在表达式中运算的时候也是这样的。

1.2 参数

Read more »

一、写在前面的话

这篇博文的本质不是一篇答案的汇总,HDLBits的题目组织形式是蕴含思想的(就像五三或者衡中的数学卷子),可以看到,虽然大部分前面的题目都谈不上难,但是如果一道一道的做下来,就会有体会,网站的搭建者是希望通过这组题目,来传递一种硬件设计思想。当然,更谦虚的说法是硬件设计思想基础。这篇博文的目的就是通过这些题目,来勉力阐述这种思想。

我写到了FSM章节的一半,其他的都写了,短期内应该是肝不动了,所以FSM的后面的答案就没有题解了,实在抱歉。

鸣谢名单在结尾放出。因为是无聊的刷题故事(不是为了写这篇文章,我打死都不会写这组题),所以鸣谢人员中只有很少在解决问题上为我提供帮助,但是倒是有很多人陪伴见证了这个无聊的故事,故一并鸣谢。

这篇文章还算成点的东西:

Read more »

一、设计想法

1.1 我的CPU的整体架构

微信图片_20211123100405

1.2 从单周期到流水线

虽然学长一直在强调重构,身边大佬也都对重构乐此不疲。但是以我个人的感觉,感觉不太需要重构(这可能就是我TLE了两天的错误观念)。我个人感觉完全可以在单周期上面改。为了给大家一个直观印象,我从修改原单周期CPU,流水线寄存器,加入阻塞刷新功能,加入转发功能方面分别说一下怎么改(严格说是怎么加,需要改的地方好像没有):

Read more »

一、代码规范

1.1 常量

我个人规范是将所有的常量都用伪指令.eqv声明,其格式会在3.2中介绍。关键涉及一个问题,就是.eqv这样定义的是一个立即数,但是不是所有的指令都可以重载了立即数参数模式,所以更加规范的规范是每次使用被.eqv定义的常量之前,都加载立即数到一个寄存器(规定为$t7),然后使用这个寄存器,这就是常量的全部规范。

当然,还有几种方法,一种就是把常量直接保存在寄存器中,每次就是用这个寄存器就好了。但是有两点缺陷,一个是寄存器资源会被占用,以puzzle为例,我们需要一个寄存器存1,来做bool标记,需要一个寄存器存4,来用于控制dir的四个方向,那么就被占用了两个寄存器。另一个是容易bug,因为要时刻留心代码不修改规定寄存器。

还有一种是临到用的时候,在用li指令给某个寄存器一个值,但是这样也是容易造成寄存器混乱,还有一个缺陷是如果要修改常量的值,就会造成大量的修改工作。

Read more »