精华内容
下载资源
问答
  • 作业2:循环计数器Verilog实现

    千次阅读 2017-11-04 21:19:04
    1.根据工程向导新建工程 ...2.新建一个Verilog-HDL文件,编写相关的Verilog语句,如下图所示 3.在TOOL下的选项中查看RTL图,如下图所示。 4.建立VWF文件,添加输入信号,然后观察仿真结果如下图所示

    1.根据工程向导新建工程

    2.新建一个Verilog-HDL文件,编写相关的Verilog语句,如下图所示


    3.在TOOL下的选项中查看RTL图,如下图所示。


    4.建立VWF文件,添加输入信号,然后观察仿真结果如下图所示


    展开全文
  • 格雷码计数器verilog实现  格雷码(Gray code),又叫循环二进制码或反射二进制码 在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型...

      格雷码(Gray code),又叫循环二进制码或反射二进制码 在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式。

      因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的3转换到4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。

     下表为几种自然二进制码与格雷码的对照表:

     
    十进制数 自然二进制数 格雷码
    0 0000 0000
    1 0001 0001
    2 0010 0011
    3 0011 0010
    4 0100 0110
    5 0101 0111
    6 0110 0101
    7 0111 0100
    8 1000 1100
    9 1001 1101
    10 1010 1111
    11 1011 1110
    12 1100 1010
    13 1101 1011
    14 1110 1001
    15 1111 1000

    一般的,普通二进制码与格雷码可以按以下方法互相转换:

      二进制码->格雷码(编码):从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是0);
      格雷码-〉二进制码(解码):从左边第二位起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变)。
    View Code
     1 // Gray counter
     2 
     3 module gray_count
     4 (
     5     input clk, enable, reset,
     6     output reg [7:0] gray_count
     7 );
     8 
     9 // Implementation:
    10 
    11 // There's an imaginary bit in the counter, at q[-1], that resets to 1
    12 // (unlike the rest of the bits of the counter) and flips every clock cycle.
    13 // The decision of whether to flip any non-imaginary bit in the counter
    14 // depends solely on the bits below it, down to the imaginary bit.    It flips
    15 // only if all these bits, taken together, match the pattern 10* (a one
    16 // followed by any number of zeros).
    17 
    18 // Almost every non-imaginary bit has a submodule instance that sets the
    19 // bit based on the values of the lower-order bits, as described above.
    20 // The rules have to differ slightly for the most significant bit or else 
    21 // the counter would saturate at it's highest value, 1000...0.
    22 
    23     // q is the counter, plus the imaginary bit
    24     reg q [7:-1];
    25     
    26     // no_ones_below[x] = 1 iff there are no 1's in q below q[x]
    27     reg no_ones_below [7:-1];
    28     
    29     // q_msb is a modification to make the msb logic work
    30     reg q_msb;
    31     
    32     integer i, j, k;
    33     
    34     always @ (posedge reset or posedge clk)
    35     begin
    36         if (reset)
    37         begin
    38         
    39             // Resetting involves setting the imaginary bit to 1
    40             q[-1] <= 1;
    41             for (i = 0; i <= 7; i = i + 1)
    42                 q[i] <= 0;
    43                 
    44         end
    45         else if (enable)
    46         begin
    47             // Toggle the imaginary bit
    48             q[-1] <= ~q[-1];
    49             
    50             for (i = 0; i < 7; i = i + 1)
    51             begin
    52                 
    53                 // Flip q[i] if lower bits are a 1 followed by all 0's
    54                 q[i] <= q[i] ^ (q[i-1] & no_ones_below[i-1]);
    55             
    56             end
    57             
    58             q[7] <= q[7] ^ (q_msb & no_ones_below[6]);
    59         end
    60     end
    61     
    62     
    63     always @(*)
    64     begin
    65         
    66         // There are never any 1's beneath the lowest bit
    67         no_ones_below[-1] <= 1;
    68         
    69         for (j = 0; j < 7; j = j + 1)
    70             no_ones_below[j] <= no_ones_below[j-1] & ~q[j-1];
    71             
    72         q_msb <= q[7] | q[6];
    73         
    74         // Copy over everything but the imaginary bit
    75         for (k = 0; k < 8; k = k + 1)
    76             gray_count[k] <= q[k];
    77         end    
    78         
    79 endmodule

     

     

    posted on 2012-10-05 15:12 sheller_liu 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lsl2964/archive/2012/10/05/2712228.html

    展开全文
  • Verilog 0到99循环计数器

    千次阅读 2020-07-23 11:25:46
    设计一个2位十进制的循环计数器,从0到99,然后再回到0.输出为out0和out1,分别表示十进制数的高位和低位。 设计代码 `timescale 1ns / 1ps module Test1030(clk,rst,out0,out1,data); input clk; input rst; output...

    设计一个2位十进制的循环计数器,从0到99,然后再回到0.输出为out0和out1,分别表示十进制数的高位和低位。

    设计代码

    `timescale 1ns / 1ps
    module Test1030(clk,rst,out0,out1,data);
    input clk;
    input rst;
    output [3:0] out0;
    output [3:0] out1;
    output [7:0] data;
    reg [3:0] out0;
    reg [3:0] out1;
    wire [7:0] data;
    
    always @(posedge clk or negedge rst)
       if(!rst)
          begin
             out0=0;
             out1=0;
          end
       else
          begin
             if(out0= =9)
                begin
                   out0<=0;
                   out1=out1+1;
                end
             else
                out0<=out0+1;
             if(out1==10)
                out1<=0;
             else
                out1=out1;       
          end
     
    assign data=(10*(out1))+out0;
    
         
    endmodule
    

    测试代码

    `timescale 1ns / 1ps
    module Test1049;
    reg clk;
    reg rst;
    wire [3:0] out0;
    wire [3:0] out1;
    wire [7:0] data;
    
    always begin
       #10 clk=0;
       #10 clk=1;
    end
    
    initial begin
       clk=0;
       rst=0;
       #100;
       rst=1;
    end
    
    Test1030 x1(.clk (clk ),
                .rst (rst ),
                .out0(out0),
                .out1(out1),
                .data(data));
    endmodule
    

    仿真波形
    在这里插入图片描述
    在这里插入图片描述
    out0为低位输出,out1为高位输出,data将两个参数综合后输出两位十进制的数。

    展开全文
  • 采用2位7段数码显示器设计一个00~99循环计数器电路。输入包括一个时钟输入端和一个低电平复位端, 复位时输出88,两个输出分别控制高位和低位数码显示器。 7位数码管显示器的结构图如下: `timescale 1ns / 1ps ///...

    采用2位7段数码显示器设计一个00~99循环计数器电路。输入包括一个时钟输入端和一个低电平复位端,
    复位时输出88,两个输出分别控制高位和低位数码显示器。

    7位数码管显示器的结构图如下:
    在这里插入图片描述

    a~g分别对应输出out中的0-7,由低位到高位,其中out0表示低位,out1表示高位。

    `timescale 1ns / 1ps
    //
    // Company: 
    // Engineer: 
    // 
    // Create Date: 2020/07/24 10:00:19
    // Design Name: 
    // Module Name: Test1000
    // Project Name: 
    // Target Devices: 
    // Tool Versions: 
    // Description: 
    // 
    // Dependencies: 
    // 
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    // 
    //
    
    
    module Test1000(clk,reset,out0,out1);
    input clk,reset;
    output [6:0] out0,out1;
    reg [6:0] out0,out1;
    reg [9:0] cnt;
    reg [3:0] pr_state,nx_state;
    reg [3:0] state;
    parameter s0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6,s7=7,s8=8,s9=9;
    parameter zero=7'b0111111,one=7'b0000110,two=7'b1011011,three=7'b1001111,four=7'b1100110,five=7'b1101101,
               six=7'b1111101,seven=7'b0000111,eight=7'b1111111,nine=7'b1101111;
             
    always @(posedge clk or posedge reset)
       if(!reset)
          begin
             pr_state<=s8;
             state<=s8;
             cnt=0;
          end
       else
          begin
             pr_state<=nx_state;
             state<=cnt;
          end
          
    always @(pr_state)
       case(pr_state)
       s0:begin
             nx_state=s1;
             out0=zero;
          end
       s1:begin
             nx_state=s2;
             out0=one;
          end
       s2:begin
             nx_state=s3;
             out0=two;
          end
       s3:begin
             nx_state=s4;
             out0=three;
          end
       s4:begin
             nx_state=s5;
             out0=four;
          end
       s5:begin
             nx_state=s6;
             out0=five;
          end
       s6:begin
             nx_state=s7;
             out0=six;
          end
       s7:begin
             nx_state=s8;
             out0=seven;
          end
       s8:begin
             nx_state=s9;
             out0=eight;
          end
       s9:begin
             nx_state=s0;
             out0=nine;
             cnt=cnt+1;
          end
       default:begin
                  nx_state=s0;
                  out0=zero;
                  state=zero;
               end
       endcase
       
    always@(state)
       case(state)
       s0:begin
             out1=zero;
          end
       s1:begin
             out1=one;
          end
       s2:begin
             out1=two;
          end
       s3:begin
             out1=three;
          end
       s4:begin
             out1=four;
          end
       s5:begin
             out1=five;
          end
       s6:begin
             out1=six;
          end
       s7:begin
             out1=seven;
          end
       s8:begin
             out1=eight;
          end
       s9:begin
             out1=nine;
          end
       default:begin
                  state=s0;
                  out1=zero;
               end
       endcase
    endmodule
    

    测试代码

    `timescale 1ns / 1ps
    //
    // Company: 
    // Engineer: 
    // 
    // Create Date: 2020/07/24 10:27:04
    // Design Name: 
    // Module Name: Test1027
    // Project Name: 
    // Target Devices: 
    // Tool Versions: 
    // Description: 
    // 
    // Dependencies: 
    // 
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    // 
    //
    
    
    module Test1027;
    reg clk;
    reg reset;
    wire [6:0] out0,out1;
    initial begin
       clk=0;
       reset=0;
       #100;
       reset=1;
    end
     
    always begin
       #10 clk=1;
       #10 clk=0;
    end
    
    Test1000 x1(
                .clk   (clk   ),
                .reset (reset ),
                .out0  (out0  ),
                .out1  (out1  ));
    endmodule
    

    仿真波形
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    因为仿真波形较长,这里只展示部分,可以根据输出out信号来对照数码管显示的数字。第一仿真图中,由于复位数为88,因此会直接跳至09,然后到10,之后会正常计数,第二个周期的完整循环将会从00开始。

    展开全文
  • [转]格雷码计数器Verilog描述

    千次阅读 2010-01-07 08:48:00
    格雷码计数器Verilog描述一、格雷码介绍(转载) 在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自...
  • verilog编程题-计数器

    2020-10-31 21:47:05
    编写一个0 1 2 3 3 2 1 0输出的循环计数器 编写一个0 1 2 3 4 5 6 6 5 4 3 2 1 0输出的循环计数器 代码 DUT //function: count 0 1 2 3 3 2 1 0 module Count( input wire clk, input wire rst_n, output wire ...
  • Verilog HDL计数器设计(作业1)

    万次阅读 2016-11-20 22:24:19
    Verilog HDL计数器设计(作业1)目录:Verilog HDL计数器设计作业1 设计内容 信号定义 RTL设计图 Quartus RTL电路图 计数器波形仿真图 计数器代码 设计内容 信号定义 RTL设计图 Quartus RTL电路图 计数器波形仿真图 ...
  • Verilog 三种计数器写法

    千次阅读 2020-02-05 01:03:07
    1 时序逻辑和组合逻辑彻底分开 //====================================================================== // --- 名称 : Count_1 ...// --- 描述 : 模10计数器,0到10循环累加 //==============...
  • Verilog设计译码器、计数器

    千次阅读 2017-10-29 20:15:59
    Verilog设计译码器、计数器实验1:设计4-16译码器1.代码module decoder4_16A(out,in); output[15:0] out; input[3:0] in; reg[15:0] out;//out为16位寄存器 always @(in) //循环输入 begin case(in) //...
  • 主要有一个循环移位计数器和一个状态翻转的flag,需要注意的是循环移位计数器是从8‘h02到8’h80这样移位的,因为总共循环周期是14而不是16。在我们的代码中通过提前使得tmp == 8’h01,接着移位赋值为8‘h02,故而...
  • 4. verilog实现BCD计数器 1 原理图 2 Verilog 代码 3 Modelsim仿真 BCD码:Binary-Coded Decimal,二进码十进数,是一种十进制的数字编码,用4位二进制数来表示十进制数中的0~9个十个数之一。BCD编码又可以分成...
  • 基于verilog的BCD计数器设计与验证

    千次阅读 2020-02-25 19:46:02
    本文学习且掌握BCD码的原理,这次来设计一个多位的8421码计数器再验证功能。 先来了解一下啥是BCD码,BCD码又被叫做二进制十进数,二-十进制代码是一种十进制数字编码,用4位二进制数来表示十进制数中的0~9.BCD编码...
  • 对读者的假设 已经掌握: 可编程逻辑基础 Verilog HDL基础 ...自由运行二进制计数器就是按照二进制形式不断循环计数。例如,4位的二进制计数器的从0000数到1111,然后翻回来重新数。 代码1 free-ru...
  • 1.点击file-new project wizard新建工程,工程名字为“cc”,然后next-next,选择cyclone旗下的EP1C2Q24C8芯片,点击next,在simulation一栏,工具名选用...2.点击file-new新建verilog HDL file,输入程序代码,已
  • verilog中的循环语句以及generate

    千次阅读 2019-09-01 15:23:47
    verilog中的循环语句以及generateverilog中的循环语句for语句while语句repeat语句foever 语句generate语句实际应用计数器结构RTL结构如图for语句RTL结果generate语句RTL结构仿真code verilog中的循环语句 verilog...
  • Verilog必做题】9. 序列产生 产生序列“11010110”,串行循环输出该序列; 给出WORD或PDF版本的报告,包括但不限于文字说明、代码、仿真测试图等。【解答】: 序列产生有多种实现方式,常用的有状态机、移位寄存器...
  • 实验1:设计4-16译码器 方法一:行为描述方式——使用CASE语句1.代码 module decoder4_16A(out,in); output[15:0] out; input[3:0] in; reg[15:0] out;... always @(in) //循环输入 begin case(in)
  • Verilog必做题】9. 序列产生 产生序列“11010110”,串行循环输出该序列; 给出WORD或PDF版本的报告,包括但不限于文字说明、代码、仿真测试图等。【解答】: 序列产生有多种实现方式,常用的有状态机、移位寄存器...
  • Verilog 整数分频

    2020-08-04 20:20:48
    比如进行N倍偶数分频时,那么可以通过由待分频时钟来触发计数器进行计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,同时计数器清零,依次循环。 这种方法可以实现任意的偶数分频,电路也不复杂。 其偶数分频...
  • 1.偶数倍(2N)分频使用一模N计数器模块即可实现,即每当模N计数器上升沿从0开始计数至N-1时,输出时钟进行翻转,同时给计数器一复位信号使之从0开始重新计数,以此循环即可。偶数倍分频原理示意图见图1。2.奇数倍(2N+...
  • Verilog学习笔记

    2014-11-25 15:12:00
    本文为本人verilog学习过程中编写的...1. 用Forever循环和disable实现5到67的计数器。 1 `timescale 1ps/1ps 2 module tst5_25(); 3 reg clk; 4 reg [7:0]count; 5 6 initial fork:CNT 7 clk = ...
  • 以此循环下去。这种方法可以实现任意的偶数分频。第二,奇数倍分频:奇数倍分频常常在论坛上有人问起,实际上,奇数倍分频有两种实现方法:首先,完全可以通过计数器来实现,如进行三分频,通过待
  • Verilog 分频器

    2014-12-19 11:12:31
    偶数倍(2N)分频 使用一模N计数器模块即可实现,即每当模N计数器上升沿从0开始计数至N-1时,输出时钟进行翻转,同时给计数器一复位信号使之从0开始重新计数,以此循环即可。偶数倍分频原理示意图见图1。 2. 奇数倍...

空空如也

空空如也

1 2 3 4
收藏数 66
精华内容 26
关键字:

循环计数器verilog