Verilog含1个数统计电路设计

这篇具有很好参考价值的文章主要介绍了Verilog含1个数统计电路设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目要求:

  1. 待检测数据“1”由外部输入,并用LED灯显示;

  1. 待检测串行数据长度为256位,由ROM输出;

  1. 一组数据检测完毕后,指示信号DONE为1;

  1. “1”的个数由数码管显示;

  1. 设计时需给出仿真结果。

  1. 设计结果下载到FPGA上实现功能的硬件验证。

verilog统计1的个数,fpga开发,Powered by 金山文档

Clk_1k

频率为1kHz的时钟信号,上升沿有效

D_1_0

待统计信号,手动输入。

St_Ld

开始统计同步置数/清零信号,手动输入脉冲信号。在高电平将D_1_0置入电路,并输出,同时清零S_1_0,N_clk和Done。在St_Ld由高变低时,电路开始统计工作。

Disp_D

显示置入的D_1_0值。

S_1_0

一帧256位数据中,与D_1_0相等的二进制数的个数,8位宽。

N_clk

统计256位数据实际需要的clk的周期数,8位宽。

Done

一帧统计结束信号,当Done=1时,表示统计结束。

电路设计要求:

  • 待检测的256位数据可以任意产生,事先存储在8位宽,深度为32的ROM中;

  • 将ROM中并行读出的8位数据转换为串行输出数据,然后检测串行数据中与D_1_0一样的二进制数个数;不允许先一次性转换成256位的串行数据然后再监测0或1个数的设计。

  • 在St_Ld信号为高电平时,实现D_1_0的同步载入和S_1_0的同步清零,同时必须在St_Ld由高变低后,电路才开始统计工作,直达Done=1为止。

  • 改变D_1_0的值实现0的个数统计。且0的个数加1的个数一定要等于256.

  • 需要解决的问题:(1)如何实行并串转化,并实现数据的连续输出?(2)控制电路允许统计的信号该如何表示;

创建项目步骤:

1.创建项目 File->New Project Wizard....

verilog统计1的个数,fpga开发,Powered by 金山文档

2.设置项目名称

verilog统计1的个数,fpga开发,Powered by 金山文档

3.选择电路板信号

verilog统计1的个数,fpga开发,Powered by 金山文档

4.其他步骤直接点击next就项目好了。

开始创建Verilog hdl文件

  1. new -> VHDL file ->OK 就好了

verilog统计1的个数,fpga开发,Powered by 金山文档
  1. 写入程序代码:

参考代码如下:

module counter_bit_1_0(shift_date,clk,st,d,rom_addr,N_clk,S_1_0,Done,Disp_d);
    input [7:0]shift_date;
    input clk,st,d;
    
    output reg [4:0]rom_addr = 0;
    output reg [7:0]N_clk;
    output reg [7:0]S_1_0;
    output reg Done;
    output reg Disp_d;
    reg [7:0]reg_date;
    
    always@(posedge clk)begin
        if(st)begin
            N_clk <= 0;
            Done <= 0;
        end
        else if(N_clk == 255)
            Done <= 1;
        else if(Done)
            N_clk <= N_clk;
        else
            N_clk <= N_clk + 1;
    end
    
    always@(posedge clk)begin
        if(st)begin
            S_1_0 <= 0;
            Disp_d <= d;
        end
        else if(Done)
            S_1_0 <= S_1_0;
        else if(reg_date[0] == d)
            S_1_0 <= S_1_0 + 1;
    end
    
    always@(posedge clk)begin
        if(N_clk % 8 == 6)
            rom_addr <= rom_addr + 1;
        else
            rom_addr <= rom_addr;
    end
    
    always@(posedge clk)begin
        if(st)
            reg_date <= shift_date;
        else if(N_clk % 8 == 7)
            reg_date <= shift_date;
        else
            reg_date <= reg_date>>1;
    end
endmodule
  1. 生成Symbol模块

verilog统计1的个数,fpga开发,Powered by 金山文档

以上步骤就核心功能实现了。

创建从ROM读取数据的mif后缀文件

  1. new->Memory Initialization File

verilog统计1的个数,fpga开发,Powered by 金山文档
  1. 设置宽为8,深为32;OK就创建好了

verilog统计1的个数,fpga开发,Powered by 金山文档

创建从ROM并行读取模块

1.如下图

verilog统计1的个数,fpga开发,Powered by 金山文档

2.如下图

verilog统计1的个数,fpga开发,Powered by 金山文档

这步设计文件名

verilog统计1的个数,fpga开发,Powered by 金山文档
verilog统计1的个数,fpga开发,Powered by 金山文档
verilog统计1的个数,fpga开发,Powered by 金山文档

这里选择上一步创建的mif文件

verilog统计1的个数,fpga开发,Powered by 金山文档
verilog统计1的个数,fpga开发,Powered by 金山文档
verilog统计1的个数,fpga开发,Powered by 金山文档
  1. 把这个文件转换为Symbol模块。

创建图形设计界面连接线路

1.创建

verilog统计1的个数,fpga开发,Powered by 金山文档

2.从Symbol Tool里找到刚才我们创建的模块

verilog统计1的个数,fpga开发,Powered by 金山文档

3.两个都导入以后连接引脚

verilog统计1的个数,fpga开发,Powered by 金山文档

以上步骤就完成了所有功能。

tips:

希望上述方法能够帮到您。

以上创建文件过程有些步骤省略了,有什么不懂及其他问题欢迎评论留言或私信我,可能不能及时回复,但我有时间都会回答的。

其实我也是菜鸟一只,有问题提出来一起进步。文章来源地址https://www.toymoban.com/news/detail-720299.html

到了这里,关于Verilog含1个数统计电路设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【【Verilog典型电路设计之log函数的Verilog HDL设计】】

    log函数是一种典型的单目计算函数,与其相应的还有指数函数、三角函数等。对于单目计算函数的硬件加速器设计一般两种简单方法:一种是查找表的方式;一种是使用泰勒级数展开成多项式进行近似计算。这两种方式在设计方法和精确度方面有很大的不同。查找表方式是通过

    2024年02月11日
    浏览(40)
  • Verilog学习笔记(3):Verilog数字逻辑电路设计方法

    例:用Verilog设计模256(8bits)计数器 (a)可综合程序描述方式 (b)常见的错误描述方式 同时Verilog的电路描述方式具有多样性,这也决定了对于电路设计的多样性。 例:用Verilog设计数字多路选择器 (a)采用真值表形式的代码 (b)采用逻辑表达式形式的代码 (c)采用结

    2023年04月08日
    浏览(116)
  • 基于Verilog设计的复位电路设计

    复位指的是将寄存器中的值全部置成默认值,一般复位包括同步复位和异步复位,复位可以由硬件开关控制,也可以由软件逻辑控制。复位电路复杂是因为复位本身是对大规模的硬件单元进行一种操作,必须要结合底层的设计来考虑问题。 相信大家在学习 FPGA 或者 ASIC 的时候

    2024年02月02日
    浏览(43)
  • 时序电路的Verilog设计——基本时序元件

    目录 一、Verilog语法 1.1 时钟边缘检测函数 1.2 边缘触发型时序模块的verilog设计规律

    2024年02月22日
    浏览(52)
  • 【【verilog典型电路设计之流水线结构】】

    下图是一个4位的乘法器结构,用verilog HDL 设计一个两级流水线加法器树4位乘法器 对于流水线结构 其实需要做的是在每级之间增加一个暂存的数据用来存储 我们得到的东西 我们一般来说会通过在每一级之间插入D触发器来保证数据的联通 通过在第一级和第二级,第二级和第

    2024年02月12日
    浏览(35)
  • 从零学verilog系列(4)组合逻辑电路设计方法

      目录 1.组合电路设计方法 1.1真值表方式(本质是最小项表达式) 1.2逻辑表达式方式 1.3结构描述方式 1.4抽象描述方式(从电路功能出发) 2组合电路设计项目 2.1数字加法器 半加器(1位加法器) 全加器 串行进位加法器(行波进位加法器) 超前进位加法器 2.2数据比较器 2.3数据选

    2024年02月04日
    浏览(40)
  • 数字电路EDA综合设计verilog笔记(持续更新)

    目录 1、常用组合电路模块的设计 1、基本门电路(常用3种描述方法) 2、译码器与编码器 (1)译码器(decoder) (2)编码器(encoder) 2、常用时序电路模块的设计 1、D触发器 2、数据锁存器 3、实用电路设计 1、基本门电路 2、译码器与编码器 3、数据选择器 4、奇偶校验产生器

    2024年02月09日
    浏览(45)
  • 数字集成电路设计(六、Verilog HDL高级程序设计举例)

    在我们的数电,集成电路设计里面,一定是层次化设计的 在一个手机芯片的一个部分,写的硬件描述语言的层次都能达到20几层,对于这样的设计,我i们就能想到采用底层的设计,中间层的设计和顶层的设计。对于小规模电路,极小规模电路,通常想的是先有模块然后去搭一

    2024年04月16日
    浏览(56)
  • 时钟分频电路设计--verilog(2分频、3分频、4分频)

    module divider( input clk, input resetn, output reg clk_d2, output reg clk_d3_pos, output reg clk_d3_neg, output clk_d3, //reg型不能assign赋值? output reg clk_d4 ); reg [1:0]counter; reg [1:0]counter_3; always@(posedge clk or negedge resetn)begin //4分频计数器模块 if(~resetn) counter = 2’b0; else if(counter = 2’b11) counter = counter + 1’

    2024年02月06日
    浏览(40)
  • 数字集成电路设计(四、Verilog HDL数字逻辑设计方法)(二)

    所有的是时序逻辑电路都可以拆成组合逻辑电路+存储 (关于组合逻辑电路的理解可以参考我数电的博客https://blog.csdn.net/y_u_yu_yu_/article/details/127592466) 可以分成两个部分,组合逻辑电路和存储电路。组合逻辑电路的输入一个是x信号一个是当前的状态,这两个信号决定了组合

    2024年02月06日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包