使用FPGA实现串-并型乘法器

news2024/10/6 14:30:38

介绍

其实我们知道,用FPGA实现乘法器并不是一件很简单的事,而且在FPGA中也有乘法器的IP核可以直接调用,我这里完全就是为了熟悉一些FPGA的语法然后写了这样一个电路。


串-并型乘法器模块

从字面上看,串-并乘法器就是其中一个乘数是串行的,另一位乘数是并行的。我在这里只描述一下模块的输入输出端口,相比于并行乘法器,串-并型乘法器占用的资源更少。

在这里,a是串行的数据,b是并行的4位数据,output也是串行的数据。


设计文件

这里我把基础的与门,D触发器和乘法器都给省略掉了。


--pipe元件

library ieee;
use ieee.std_logic_1164.all;
use work.my_component.all;
entity pipe is
    port( a,b,clk,rst : in std_logic;
            d_reg_out : out std_logic);
end entity;
architecture behavior of pipe is
    signal f_add_outc,cin,f_add_outs : std_logic;
begin 
    u1 : component f_add
    port map(a,b,cin,f_add_outs,f_add_outc);
    u2 : component d_reg
    port map(f_add_outc,clk,rst,cin);
    u3 : component d_reg 
    port map(f_add_outs,clk,rst,d_reg_out);
end architecture;


--packeg声明元件

library ieee;
use ieee.std_logic_1164.all;
package my_component is
------------------------------------
component and_2 is
    port( a,b : in std_logic;
            and_2_out: out std_logic);
end component;
------------------------------------
component d_reg is
    port( d_reg_in,clk,rst : in std_logic;
            d_reg_out : out std_logic);
end component;
------------------------------------
component f_add is
    port (a,b,cin : in std_logic;
            f_add_outs,f_add_outc : out std_logic);
end component;
------------------------------------
component pipe is
    port( a,b,clk,rst : in std_logic;
            d_reg_out : out std_logic);
end component;
end package;


顶层文件

library ieee;
use ieee.std_logic_1164.all;
use work.my_component.all;
entity multiplier is
    port( a,rst,clk : in std_logic;
            b : in std_logic_vector(3 downto 0);
            output : out std_logic);
end entity;
architecture behavior of multiplier is
    signal and_out,reg_out : std_logic_vector(3 downto 0);
begin
    u1: component and_2 port map(a,b(3),and_out(3));
    u2: component and_2 port map(a,b(2),and_out(2));
    u3: component and_2 port map(a,b(1),and_out(1));
    u4: component and_2 port map(a,b(0),and_out(0));
    u5: component d_reg port map(and_out(3),clk,rst,reg_out(3));
    u6: component pipe port map(and_out(2),reg_out(3),clk,rst,reg_out(2));
    u7: component pipe port map(and_out(1),reg_out(2),clk,rst,reg_out(1));
    u8: component pipe port map(and_out(0),reg_out(1),clk,rst,reg_out(0));
    output <= reg_out(0);
end behavior;


测试文件

在测试文件中,我只对顶层文件进行了测试,有兴趣的小伙伴可以对各个信号进行仿真验证。

library ieee;
use ieee.std_logic_1164.all;
use work.my_component.all;
entity tb_multiplier is
    
end entity;
architecture behavior of tb_multiplier is
    component multiplier is
        port( a,rst,clk : in std_logic;
                b : in std_logic_vector(3 downto 0);
                output : out std_logic);
    end component;
    signal a,rst,clk : std_logic := '0';
    signal output : std_logic := '1'; 
    signal b : std_logic_vector(3 downto 0);
begin
    dut : multiplier
    port map(a,rst,clk,b,output);
    process
    begin
        clk <= '1';
        wait for 10ns;
        clk <= '0';
        wait for 10ns;
    end process;
    process
    begin
        a <= '0';
        b <= "1101";
        wait for 40ns;
        a <= '1';
        wait for 40ns;
        a <= '0';
        wait for 80ns;
    end process;
end architecture;


仿真结果

在仿真测试中,我们把a看作是4位串行的数据,我们看黄线中间的8位数据,a是0011,后面紧跟4个0,b是1101,输出结果是10011100,对应十进制数相乘,结果是正确的。


结语

确实是不太好写的,对于这种比较复杂的电路,一定要去建立一个一个的元件,然后将各个元件进行连接,这样会容易很多。

更完整的代码在相关的压缩包,有问题大家留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1643330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电磁波的极化形式

极化是电磁波的一个固有属性,是指电磁波的电场矢量末端的轨迹曲线,电磁波的极化 状态由这条曲线所决定,电场的振动方向称为极化方向,极化方向与传播方向共同构成了极 化面。在通信链路中,只有接收机天线与被接收信号的极化形式匹配时,才能有效的接收信号,如果接收机天线…

STM32 串口IDLE接收空闲中断+DMA

参考 http://t.csdnimg.cn/fAV38 1.基础知识 STM32 IDLE 接收空闲中断 功能&#xff1a; 在使用串口接受字符串时&#xff0c;可以使用空闲中断&#xff08;IDLEIE置1&#xff0c;即可使能空闲中断&#xff09;&#xff0c;这样在接收完一个字符串&#xff0c;进入空闲状态时&…

OpenCV(五) —— 人脸识别模型训练与 Windows 下的人脸识别

本文主要内容&#xff1a; 如何训练 OpenCV 的人脸识别模型如何在 Windows 下利用 OpenCV 进行人脸识别 1、概述 人脸识别需要人脸模型&#xff08;特征集合&#xff09;的支持&#xff0c;人脸定位的速度与准确度取决于模型。 OpenCV 提供了已经训练好的模型&#xff0c;无…

RK3568平台(基础篇)linux错误码

一.概述 linux应用程序开发过程中&#xff0c;经常会遇到一些错误信息的返回&#xff0c;存在的可能性有&#xff0c;参数有误、非法访问、系统资源限制、设备/文件不存在、访问权限限制等等。对于这类错误&#xff0c;可以通过perror函数输出具体描述&#xff0c;或者通过str…

轨道交通巡检机器人的应用范围

在现代轨道交通系统的庞大网络中&#xff0c;无数的轨道、设备和设施交织在一起&#xff0c;如同一个精密的机器在高效运转。而在这背后&#xff0c;轨道交通巡检机器人正悄然登场&#xff0c;它们如同一个个智能的守护者&#xff0c;穿梭于各个场景之中。那么&#xff0c;这些…

2. 深度学习笔记--损失函数

在机器学习中&#xff0c;损失函数是代价函数的一部分&#xff0c;而代价函数则是目标函数的一种类型。 Loss function&#xff0c;即损失函数&#xff1a;用于定义单个训练样本与真实值之间的误差&#xff1b; Cost function&#xff0c;即代价函数&#xff1a;用于定义单个批…

富文本编辑器CKEditor4简单使用-08(段落首行缩进插件 + 处理粘贴 Microsoft Word 中的内容后保持原始内容格式(包括首行缩进))

富文本编辑器CKEditor4简单使用-08&#xff08;段落首行缩进插件 处理粘贴 Microsoft Word 中的内容后保持原始内容格式&#xff08;包括首行缩进&#xff09;&#xff09; 1. 缩进&#xff0c;特殊方式处理——修改原工具栏里的增加缩进量2 缩进&#xff0c;插件处理2.1 下载…

【Java基础】Maven的生命周期(clean+site+default)

1. 前言 在 Maven 出现之前&#xff0c;项目构建的生命周期就已经存在&#xff0c;开发人员每天都在对项目进行清理&#xff0c;编译&#xff0c;测试及部署&#xff0c;但由于没有统一的规范&#xff0c;不同公司甚至不同项目之间的构建的方式都不尽相同。 Maven 从大量项目…

ES集群数据备份与迁移

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、文章涉及概念讲解二、操作步骤1.创建 snapshot repository操作主机hadoop1分别操作从机hadoop2和hadoop3 2. 查看仓库信息3. 备份索引&#xff0c;生成快照…

k8s Dashboard 运维维护记录

k8s Dashboard 运维维护记录 k8s Dashboard 运维维护记录 Q1&#xff1a;需要使用firefox浏览器访问 提示了证书错误NET::ERR_CERT_INVALID&#xff0c;原因是由于物理机的浏览器证书不可用 需要注意的是&#xff0c;若提示“连接不安全”的警告时&#xff0c;点击“高级”…

2024新蓝海项目 零门槛高收益持续稳定 纯手机操控 单日盈利3000 新手当日入门

这个项目具有极高的稳定性&#xff01;通过积累的里程积分&#xff0c;我们可以以较低的成本获取机票。然后&#xff0c;我们以远低于官方网站的价格出售这些机票&#xff0c;从而获得利润。随着我们经营的时间增长&#xff0c;我们积累的客户群体也会越来越大。 项目 地 址 …

游戏AI的智能化:机器学习在虚拟生命中的应用

文章目录 写在前面游戏AI的智能化&#xff1a;机器学习在虚拟生命中的应用游戏内容的自动化创作&#xff1a;机器学习的革新性应用玩家体验的个性化优化&#xff1a;机器学习的定制化力量未来展望&#xff1a;机器学习塑造游戏行业新纪元游戏AI的智能化发展自动化内容生成的革命…

什么是脏读?幻读?不可重复读?

脏读(Drity Read)&#xff1a;某个事务 A 已更新一份数据&#xff0c;另一个事务 B 在此时读取了同一份数据&#xff0c;由于某些原因&#xff0c;事务 A 回滚&#xff0c;而事务B读取到事务 A 回滚前的数据。 例子:小明读取到小红提交的100数据.但是小红异常回滚了数据,100变…

【前端学习——正则】

https://www.bilibili.com/video/BV1da4y1p7iZ/?spm_id_from333.337.search-card.all.click&vd_source5cef5968d539682b683e7d01b00ad01b 学习网站 https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md

CCPC训练赛题解补题

B. Memory Problem - B - Codeforces&#xff08;原题出处点击这里&#xff09; 题意&#xff1a;根据题目中给出的求和公式&#xff0c;将输入的数据进行判断&#xff0c;输出”“或”-“或”0“&#xff1b;因为范围特别大&#xff0c;精度特别高&#xff0c;所以循环遍历的…

mac监听 linux服务器可视化(Grafana+Promethus+Node_exporter)

Grafana和promethus(普罗米修斯)的安装和使用 监控系统的Prometheus类似于一个注册中心&#xff0c;我们可以只需要配置一个Prometheus,而在其他服务器&#xff0c;只需要安装node_exporter,它们的数据流转就是通过exporter采集数据信息&#xff0c;然后告诉prometheus它的位置…

leetCode68. 文本左右对齐

基本思路&#xff1a; leetCode68. 文本左右对齐 代码 class Solution { public:vector<string> fullJustify(vector<string>& words, int maxWidth) {vector<string> res;for(int i 0; i < words.size(); i){ // 枚举有多少个单词int j i 1; //…

Springboot+vue基于协同过滤算法的电商系统

项目由maven管理依赖&#xff0c;mybatis&#xff08;plue&#xff09;与数据库交互&#xff0c;一共14张表&#xff0c;功能都经过测试无问题&#xff0c;需要可在最下方扫码联系我。&#xff08;有文档&#xff0c;调试&#xff0c;讲解可加购&#xff09; 商品推荐板块基于…

如何选购骨传导耳机?精选五大拔尖宝藏骨传导耳机,闭眼入也不踩雷!

尽管目前市面上的骨传导耳机热度非常高&#xff0c;一度成为当下最热门的耳机款式&#xff0c;但作为有着资深工作经验的数码测评师&#xff0c;我仍然要提醒大家&#xff1a;在选择骨传导耳机的时候&#xff0c;不要盲目选择网红品牌&#xff0c;因为市场上的许多骨传导耳机过…

【Python基础】进程

文章目录 [toc]程序与进程的区别与联系同步任务示例 并行任务示例进程调度的“随机性” 进程属性与方法process_object.start()方法process_object.join()方法process_object.daemon属性没有设置守护进程的情况设置守护进程的情况 process_object.current_process()方法 进程通…