首页 > 其他分享 >数电第7周周结_by_yc

数电第7周周结_by_yc

时间:2022-10-17 23:56:17浏览次数:46  
标签:周周结 begin initial ctrl clk yc 数电 cnt rstn

一、通用双向移位寄存器:

  • 功能描述:
      4位的双向移位寄存器,含控制输入端(ctrl)、串行输入端(Dsl、Dsr)、4个并行输入端和4个并行输出端,要求实现5种功能:异步置零同步置数左移右移保持原状态不变,功能如下:
ctrl action
00 保持
01 右移
10 左移
11 并行输入
  • 设计方案:
      ①异步置零:复位信号需放入敏感列表;
      ②优先级:reset>ctrl;
      ③ctrl的多方案可以用case来完成
  • 关键代码:
    always@(posedge clk or negedge reset)   begin
        if(~reset)
            Dout <= 4'b0000;                //Asynchronous zero setting
        else begin
            case(ctrl)
                2'b00: Dout <= Dout;                //remain
                2'b01: Dout <= {Dsr, Dout[3:1]};    //shift right
                2'b10: Dout <= {Dout[2:0], Dsl};    //Shift left
                2'b11: Dout <= Din;         //Parallel input
            endcase
        end
    end
  • 仿真验证:
      分别控制实现保持、右移、左移和并行输入。
    initial begin
        clk=0;
        forever #10 clk=~clk;
    end
    
    initial begin
        reset=0; Dsl=0; Dsr=1; ctrl=2'b00; Din=4'b1111;
        #100 reset=1; Dsl=0; Dsr=1; ctrl=2'b01; Din=4'b1111;
        #100 reset=1; Dsl=0; Dsr=0; ctrl=2'b10; Din=4'b1111;
        #100 reset=1; Dsl=0; Dsr=0; ctrl=2'b11; Din=4'b0001;
        #100 $stop;
    end

  输出波形如下图所示,符合题意。

  • 综合结果:
  • 总结反思
      看好模块名称!!!

二、带控制组的触发器组:

  • 功能描述:
      16位D触发器,以byteena来控制寄存器的高低字节是否被写入。byteena[1]控制高字节d[15:8],而byteena[0]控制低字节d[7:0].resetn是低电平有效的同步复位信号.所有DFF由时钟的上升沿触发.

  • 设计方案:
      ①普通的16位同步复位D触发器,resetn不在敏感列表中
      ②优先级:reset>byteena;
      ③byteena的多方案可以用case来完成

  • 关键代码:

    always @(posedge clk)   begin
        if(~resetn)
            q <= 16'b0000000000000000;
        else    begin
            case(byteena)
                2'b00: q <= q;
                2'b01: q <= {q[15:8],d[7:0]};
                2'b10: q <= {d[15:8],q[7:0]};
                2'b11: q <= d;
            endcase
        end
    end
  • 仿真验证:
      依次设计进行:不赋值、低位赋值、高位赋值、全部赋值
    initial begin
        clk=0;
        forever #10 clk=~clk;
    end

    initial        begin
        resetn=1; byteena=2'b00; d=16'b1010101111001101;
        #100 resetn=1; byteena=2'b01; d=16'b1010101111001101;
        #100 resetn=1; byteena=2'b10; d=16'b1010101111001101;
        #100 resetn=1; byteena=2'b11; d=16'b1010101111001101;
        #100 resetn=0; 
        #100 $stop;
    end

  如图,在第一个大周期内,输出悬空,未赋值;第二个时钟周期内,完成了低位赋值,高位悬空;三四周期依次完成了高位赋值和全赋值,符合题意。

  • 综合结果:

三、算数左右移:

  • 功能描述:
      64位算术移位寄存器,具有同步load数据功能,具体移位由ctrl控制,由下表所示:
ctrl action
00 算术左移1位
01 算术左移8位
10 算术右移1位
11 算术右移8位
  • 设计方案:
      ①算术右移时,需要复制最高位,可以通过拼接运算符来完成;算术左移同逻辑左移
      ②优先级:load>ena>ctrl;
      ③ctrl的多方案可以用case来完成
  • 关键代码:
    always@(posedge clk)    begin
        if(load)
            q <= data;
        else if(ena)    begin
            case(ctrl)
                2'b00: q <= {q[62:0], 1'b0};
                2'b01: q <= {q[55:0], 8'b0};
                2'b10: q <= {1'b0, q[63:1]};
                2'b11: q <= {8'b0, q[63:8]}; //unsigned number
            endcase
        end
    end
  • 仿真验证:
      分别设计进行加载数据、算术左移1、算术左移8、算术右移1、算术右移8、不移位。
    initial begin
        clk=0;
        forever #10 clk=~clk;
    end
    
    initial begin
        load=1; ena=1; ctrl=2'b00; data=16'h1111111111111111;
        #20 load=0; ena=1; ctrl=2'b01; data=16'h1111111111111111;
        #20 load=0; ena=1; ctrl=2'b10; data=16'h1111111111111111;
        #20 load=0; ena=1; ctrl=2'b11; data=16'h1111111111111111;
        #20 load=0; ena=0; ctrl=2'b10; data=16'h1111111111111111;
    end

  得到对应波形如下图所示,符合预设。

  • 综合结果:
  • 总结分析:
      拼接运算符的正确应用:q <= {{8{q[63]}}, q[63:8]}

四、8位同步二进制加减法计数器:

  • 功能描述:
      8位同步二进制加减法计数器,输入为时钟端clk(下降沿有效)和异步清除端rstn(低电平有效),加减控制端updown,当updown为1时执行加法计数,为0时执行减法计数;输出为进位端C和8位计数输出端Q

  • 设计方案:
      ①异步置零:复位信号需放入敏感列表;
      ②优先级:rstn>updown;
      ③updown的多方案可以用case来完成.
      ④进位端C只有在从255->0时才为高电平,其余为低电平,可以将当前值是否为255作为一级判断。

  • 关键代码:

    always @(negedge clk)   begin
        if(~rstn)   begin   Q <= 8'b0;C=0;  end
        else if(Q == 8'b11111111)   begin
            if(updown == 1) begin   C=1; Q=8'b00000000; end
            else        begin   C=0; Q=8'b11111110; end
        end
        else    begin
            case(updown)
                1'b1:   begin   Q = Q + 1; C=0;     end
                1'b0:   begin   Q = Q - 1; C=0;     end
            endcase
        end
    end
  • 仿真验证:
      设计含加减法和255->0的testbench
    initial begin
        clk=0;
        forever #10 clk=~clk;
    end

    initial begin 
        rstn=0; updown=1;
        #20 rstn=1; updown=1;
        #20 rstn=1; updown=0;
        #40 rstn=1; updown=1;
        #100 $stop;
    end 

  相应的波形图如下,加减法合题意,且由255->0时,相应的进位输出为1.

  • 综合结果:

五、分频器:

  • 功能描述:
      N分频时钟,50%占空比上升沿采样,异步低电平复位不可采用电平触发同一敏感列表不可同时出现同一个信号的上升沿和下降沿

  • 设计方案:
      ①异步复位:rstn信号出现在敏感列表中;
      ②因为对于奇偶性不同的N值,涉及到分别在上升沿和下降沿进行翻转,故需对N值得奇偶进行讨论:
      N为偶数:

  为实现能够对时钟频率进行分频,则需要对时钟的翻转次数进行计数,这里采用对时钟上升沿进行计数,cnt每加一,则说明经过了一个时钟周期,如按图中需分四倍频,则需经过两个时钟周期,进行一次反转,四倍频即为\({cnt==1}\),则进行一次翻转,推广到偶数的N,则为每逢\({cnt==(N>>1)-1}\),进行一次翻转。

  N为奇数:

  而奇数的特殊点在于涉及到在时钟的上升沿和下降沿分别翻转,则可将其等效为两个偶倍频的并.
  如图中\({odd\_clk\_out\_1}\),\({odd\_clk\_out\_2}\),其中前者在时钟上升沿进行翻转;后者在时钟下降沿进行翻转。
  同时依旧在上升沿进行计数(图上cnt有一定误差,画不到中间的部分

标签:周周结,begin,initial,ctrl,clk,yc,数电,cnt,rstn
From: https://www.cnblogs.com/Qzzz/p/16801174.html

相关文章

  • PyCharm下载和安装教程(包含配置Python解释器)
    PyCharm是JetBrains公司(www.jetbrains.com)研发,用于开发 Python 的IDE开发工具。图1所示为JetBrains公司开发的多款开发工具,其中很多工具都好评如潮,这些工具可以......
  • Mac下配置Pycharm教程
    除非你是用记事本写代码,或者用vim写代码的大牛,那么推荐使用PyCharm编写Python代码。PyCharm是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的......
  • 第二季:6CountDownLatch/CyclicBarrier/Semaphore使用过吗?【Java面试题】
    第二季:6CountDownLatch/CyclicBarrier/Semaphore使用过吗?【Java面试题】​​前言​​​​推荐​​​​6CountDownLatch/CyclicBarrier/Semaphore使用过吗?​​​​说明​​......
  • Potyczki Algorythmiczne 2011
    TrialRound:Tulips按题意模拟。#include<cstdio>constintN=15000;intn,ans=N,x,v[N+1];intmain(){scanf("%d",&n);while(n--){scanf("%d",&x);......
  • 初学者安装Anconda环境配置的pycharm教程
    1.Anaconda下载地址:Anaconda|IndividualEdition双击下载好的 Anaconda2-5.2.0-Windows-x86_64.exe文件,点击 Next 即可。点击 IAgree (我同意)Installfor:Just......
  • Verilog与数电[4]-点灯
    硬件SiPeedTang-Primer-20k开发板点灯[https://wiki.sipeed.com/hardware/zh/tang/tang-primer-20k/examples/led.html]candy1.v//点灯moduleled(inputClo......
  • Verilog与数电[3]-波形图
    保命声明:笔者在校属于中低水平学生,代码能力有限,若行文中有错漏之处欢迎大家指出。在线小工具在线波形图查看[https://wavedrom.com/editor.html]Verilog刷题网站[http......
  • DNS(Bind9) Anycast 数据中心部署 最终版
    DNS(Bind9)Anycast数据中心部署最终版问题点:现网使用的是windowsad域控加windowsdns的结构,支撑全网设备的加域和域名解析功能,但由于部分终端机不能动态更换dns服务器ip......
  • Pycharm一键选中多个东西(数据、函数等)进行修改、删除、替换
    Pycharm一键选中多个东西(数据、函数等)进行修改、删除、替换样例:1、Pycharm一键选中多个不同的东西(数据、函数、关键字等)进行修改替换操作办法:1)左手按住“Ctr”+“Shift”+......
  • 如何在EasyCVR平台中将所有通道快速修改为按需直播?
    EasyCVR具备强大的视频接入、汇聚与管理、视频分发等视频能力,可实现的视频功能包括:视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、服务器集群、智......