视 C++ 为一个语言联邦
尽量以 const, enum, inline 代替 #define
- 对于单纯常量,最好以 const 对象或 enums 替换 #define
- 对于形似函数的宏,最好改用 inline 函数替换 #define
尽可能使用 const
const 允许我们指定一个 语义约束,编译器会强制实施这项约束。
const 可修饰常量 及 static 对象。
可修改 classes 内部的 static 或 non-static 成员变量。
非整数倍的数据位宽转换,和上一篇比较类似,但是由于转换宽度非整数倍,会产生更多的状态,但又不复杂到需要使用状态机来解决。
通常的做法是 寻转转换前后位宽的最小公倍数。用计数器记录状态,计数器的值和最小公倍数相关。在这个例子中,转换前宽度 A = 24
,转换后宽度 B = 128
,最小公倍数为 24 * 16 = 128 * 3
,所以:
16 - 1 = 15
data_out
,且标明 valid_out
和上一篇类似,不过这次上下游握手协议均是 valid-ready。
数据通路的处理比较清晰,关键是上下游的控制信号传递。
这是核心:
1 | // valid_b == 1b'1 ---> 数据输出有效,此时停止读入新的数据 |
数据串并转换的练习。这里做了许多简化,不用考虑阻塞的情况:即上游使用 valid-ready,下游使用 valid-only 的握手机制,因此不会出现阻塞。如果上下游均使用 valid-ready 握手机制,那么需要处理阻塞的情况,这个问题会在后续有所考虑。
关于 git-flow 的简单介绍,是时候来好好管理我们的项目了,一条 main 交到底的方式并不合适。
参考:
基本的分支类型
分支名称 | 说明 | 命名 |
---|---|---|
master | 发布分支 | master 或者 main |
develop | 开发分支 | develop |
feature | 功能分支 | feature/FOO-1 |
bugfix | 修复分支 | bugfix/FOO-2 |
hotfix | 紧急修复分支 | hotfix/FOO-3 |
release | 发布前的准备工作 | release/1.0.3 |
额外的老版本的维护分支,一般使用 support
,support/1.0.x
。
牛客上 Verilog 练习题的答案合集。我对这些题目的评价是比较坑,练习的快感不如 HDLbits,而且测试非常不专业,但还是值得一做的。
一个用 Python 实现的邮件自动发送器,代码不长,这再次展现了 Python 这个胶水语言的简洁。
网上有很多基于 Python 的邮件发送器实现,这里使用的是基于 smtplib 的方式:
如果还不知道最简单的 Makefile 应该怎么写,可以参考 Makefile 基本用法。
参考链接:多目录makefile。
简单的 Makefile 很好写,但是一旦复杂起来,尤其是多文件和多目录的 Makefile 就不是那么好写了。参考上面列出的文章,记录一个 cheatlist。