将Verilog代码转换成原理图的思路-小白记录(1)

哈哈,转行开始做电路设计,其中所进行的training experiment里面有个题目是如何将Verilog代码转换为一个原理图,并画出图进行调试仿真。

原题:

always@(posedge clkm_cke or negedge reset_n_i)

        begin

                if(!reset_n_i)

                        cnt_counter<=6'b000001;

                else begin

                        if(colcmd_or_zqc)

                                cnt_counter<=init_counter;

                        else if(cnt_counter!=6'b000001)

                                cnt_counter<=cnt_counter-1b'1;

                end

        end

思路一:

1. 通过Verilog结构,进行大概判断使用了哪些基础电路元件:

        参考文章:根据verilog代码画电路图_傻童:CPU的博客-CSDN博客_verilog如何生成电路图

        首先可以看出来这是一个D边沿触发器(收到时钟信号clkm_cke的上升沿脉冲,Q等于D,若收到复位信号reset_n_i的下降沿脉冲,Q=0,其他情况下Q值保持不变),第一层选择器(选择条件是复位信号reset_n_i为0还是1,选择结果为6'b000001或者维持原输出cnt_counter不变),第二层选择器(选择条件为colcmd_or_zqc为0还是1,选择结果为init_counter或者维持原输出cnt_counter不变),第三层选择器(选择条件为比较器的输出结果,选择结果为执行减法器或者维持原输出cnt_counter不变),比较器的输入分别为cnt_counter和6'b000001,到这里就分析完了。

2. 下面再分析如何实现执行的这个减法器。

        在计算机中,如果设置了一定位数的寄存器,那么超出这个位数的高位会被溢出,这也就意味着,根据’‘a-b=a-b+mod=a+mod-b=a+b补码’‘,这个加法器可以使用加法器实现,补码可以通过按位取反实现。

3. 我又遇到了一个问题,那就是这个多位比较器如何实现:

        当前准备借助加法器进行替代方案实现,即计算cnt_counter-6'b000001,并将计算结果按位与。

        画好电路图之后,调试成功后出现一个问题,那就是,如果按照这个Verilog所描述的电路动作将cnt_counter-1b'1时,cnt_counter<0>出现了被干扰或者短路的情况,一直输出为0,但是将电路动作改为cnt_counter-4b'1000时,cnt_counter<5:0>的结果当然和原电路不一样了,但是可以正常输出。ps:因为这里我是用一个6位加法器实现这一动作,因此实际电路中,减去的是一个6位二进制数,即6b'000001或者6b'001000。不知道是否于此有关。暂时不解决这个问题,继续往后进行experiment。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值