BCD码为使用4个bit表示一个十进制位数,即123的BCD码为0x123,余3码表示BCD码基础上加3(十进制),例子如下,对于26而言:
格雷码的优势在于相邻的数之间的二进制表达仅有一个bit发生变化,在跨时钟域中不会产生竞争冒险,格雷码-二进制转换如下所示:
卡诺图的思路为可视化的将电路逻辑转为最小乘积项,再通过合并最小乘积项进行化简,如这一个例子:
表中为1表示有这一个乘积项,例如在AB=01、CD=00有一个1,即表示逻辑表达式含有项ABCD。随后绘制框,绘制框的过程即为将最小项进行组合化简的过程:同时包括0和1的乘积项可消去,如下图所示:
组合竞争冒险即信号在实际电路中的传输存在延迟(Delay),所以由于信号到达同一元件的时间并不一致,到达的时间可能存在延迟。导致组合逻辑电路在某些时刻的结果看上去可能是错误的。竞争冒险的检查方法有:
(以上优缺点内容来自知乎用户Kevin Zhang的回答,如有侵权可联系本人删除)
违反建立时间和保持时间可能产生亚稳态,对于一个一般的时序逻辑模型如下所示:
同步器:多个(一般为两个)接收域寄存器串联,不能解决亚稳态问题,仅能PG电子网站缓解。同时需要注意连接到同步器上的输入必须是
的寄存器输出信号,否则可能产生毛刺问题。多bit信号一般不用同步器,可能产生毛刺传递错误的数据。
异步FIFO:用于多bit数据的跨时钟域传输(使用格雷码传递地址指针,仅有1bit发生跳变不会产生毛刺)
另外,还有一种脉冲同步器需要注意,这种脉冲同步器的方法为在发送时钟域中,每接收到一次脉冲,传递信号的电平发生一次跳变,传递信号通过同步器传递到接收时钟域后使用边沿检测还源出脉冲。
其中Gx为0表示没有这一条连接,为1表示有这一条连接,每一种连接对应一种多项式,如下所示:
verilog的位宽推断的基本准则为:中间值的位宽=整个表达式中所有操作数(包括结果,即等号左边的数字),例如:
该表达式b+c的结果为10bit,赋值给a的时候舍去最高2bit,再例如:
该表达式b+c的结果为8bit,因此很容易产生数据溢出的问题(255+255-254)
宏定义的方式为使用``define A B进行,声明一个宏定义A,内容是B,使用时需要使用\A表示这是一个宏定义。宏定义的使用可以理解为“字符串呼唤”,即在代码中使用`A从字符串角度等效于B,如下例子:
FPGA的连接具有易失性(使用SRAM编程),掉电丢失,需要片外存储固件,存储固件一般使用FLASH或EEPROM
工艺级低功耗技术:包括降低电源电压(降低动态功耗,但导致阈值降低,增大静态功耗),降低晶体管尺寸,多层金属布线(避免大范围连线,减少开关电容,但会增加耦合寄生电容)等
版图级低功耗技术:优化时钟树(占功耗40%左右),多电源电压(MSMV关键路径电压高提高性能,其他路径电压低降低功耗),路径平衡技术(使输入信号尽量同时到达,减少不必要的翻转)
门级低功耗技术:门尺寸优化(减小器件尺寸降低功耗,会导致性能下降),门级多阈值电压
系统级低功耗技术:动态电源电压管理(DVS,根据负载调整电源电压),动态阈值调节(DTS),多电压域(关闭不需要的区域的电源,降低静态功耗)
该电路消除了直接使用AND门控制产生的毛刺问题,即仅当CLK为低时,控制信号才可以发生变化,因此不会产生毛刺问题(本来CLK为高时直接被控制信号关断)
有两种商品A和商品B,A商品售价5分,B商品售价10分,可投入5分或10分的硬币,考虑找零
UART为一个全双工的双线协议,每一根线负责一个方向,分为TX和RX,每根线上一次传输如下:
数据帧:根据约定可以发送多个bit的数据,低位先发送,每个bit占据一个时钟周期
奇偶校验(可选):在数据bit后添加一个bit,使数据整体1的数量为奇数或者偶数,占据一个时钟周期
由于线上没有相关时钟,因此时钟靠通信双方进行约定。当通信双方时钟不同时,会出现数据乱码问题。时钟的约定靠波特率完成,在UART中波特率一般与比特率等效,即每秒钟发送的bit数量。对于一个下图的传输,需要1bit起始位,7bit数据位,1bit校验位,1bit停止位,一次传输一共需要10bit,以波特率为9600为例,1s可以发送9600bit,因此一共可以进行960次传输,此时时钟频率被约定为1/9600。




