天天看点

【Verilog-HDLBits刷题】2022.02.23学习笔记

进度:98/178,going on…

1、原码、反码、补码与溢出:

  ①正数:原码反码和补码是其本身;

  ②负数:其原码和对应的正数(绝对值相等)的原码仅是符号位不同;

    其反码是除符号位外,其他位按位取反;

    其补码是除符号位外取反加一;

  ③零:0的原码、反码有+ 0和- 0之分

  ④溢出与进位

   运算:

1.补码加法
符号位和数值位一起参与运算,得最终结果(包括符号位与数值位)
[x]补 + [y]补 = [x+y]补  两数补码的和等于两数和的补码
2.补码减法
[x]补 - [y]补 = [x]补 + [-y]补 = [x-y]补
3.溢出与进位
    1)溢出指带符号数的补码运算溢出,用来判断带符号数补码运算结果是否超出补码所能表示的范围。当两个正数相加产生负结果,或两个负数相加产生正结果时,会发生有符号溢出
	2)进位指运算结果的最高位向更高位的进位,用来判断无符号数运算结果是否超出了计算机所能表示的最大无符号数的范围
4.判断溢出的方法
	1)利用符号位和数值部分的最高位的进位状态来判断结果是否溢出,通过该两位进位状态的异或结果来判断,结果为1时,表示溢出,结果为0时,表示没有溢出
	2)通过参与运算的两个数的符号及运算结果的符号进行判断
           

2、 SOP form:sum of product,即与或式,最小项相关,卡诺图圈1即可;

  POS form:product of sum,即或与式,最大项相关,卡诺图圈0后整体取反;

 相同最大项和最小项之间存在互补关系

3、题目:For the following Karnaugh map, give the circuit implementation using one 4-to-1 multiplexer and as many 2-to-1 multiplexers as required, but using as few as possible. You are not allowed to use any other logic gate and you must use a and b as the multiplexer selector inputs, as shown on the 4-to-1 multiplexer below.

You are implementing just the portion labelled top_module, such that the entire circuit (including the 4-to-1 mux) implements the K-map.

分析:本题相当于固定ab取值之后,按列来观察cd得取值对结果输出的影响;

   不能使用逻辑门进行描述,可以用三目运算符来表达;

解答:

assign mux_in[0] = c ? 1 :(d ? 1 : 0);  //表示cd全为假时,结果才为0
    assign mux_in[1] = 1'b0 ; 			    //恒为0
    assign mux_in[2] = d ? 0 : 1            //表示~d时,结果才为1
    assign mux_in[3] = c ? (d ? 1 : 0) : 0;//cd都为真时,取值为1
           

4、当一个块中有多条语句时,一定别忘了加 begin…end,对于小project可能很容易更改,但对于大的project,跑一次综合仿真要很长时间,如果中途出错,时间成本就太大了。还有像if…else写上else是个好习惯呢~ 一定要养成良好的代码习惯哈!

5、报错:Port “qn” does not exist in primitive “dff” of instance “dff1” File

又犯了同样的错误!!!怎么能给模块名定义为dff呢!笑哭!

6、想要获取输入信号的上升沿:可以将输入信号与其滞后一拍的信号相与

如输入信号:in;打一拍之后的信号:in_reg,in_reg存储的是in上一拍的信号,所以当in上升沿到来时,下一时钟节拍in_reg才为1,而此时in_reg为0,所以上升沿检测可表达为:

in&~in_reg;

想要获取输入信号的下降沿:

in_reg &~ in

想要获取输入信号的双边沿:异或操作:

in ^ in_reg;

想要信号在上升沿和下降沿时都响应:建立两个触发器,分别在上升沿和下降沿时响应,将两个输出信号暂存,然后利用组合逻辑进行最后输出的赋值。

 例:

reg p, n;
	always @(posedge clk)
     	   p <= d ^ n;
    always @(negedge clk)
       	   n <= d ^ p;
        
	assign q = p ^ n;
	
	解释:上升沿:q = (p^n) = (d^n^n) = d;
			  下降沿: q = (p^n) = (p^p^d) = d;

n^n=0;  n^0=n;
           

ps:今天就先刷到这,做会和毕设相关的工作去,嘻~

今天和xc公司开了合作项目的例会,着实觉得自我表达能力还需提高~

  but提升总是要有一个过程的,保持自信,继续前进!

继续阅读