FPGA 移位运算与乘法

news2025/1/31 11:26:42

  题目:

         已知d为一个8位数,请在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号通知此时刻输入的d有效(d给出的信号的上升沿表示写入有效)

 

由题意可知:

        复位信号高有效,低复位;在inpu_grant上升沿到来时,取一次d的值,并且4个时钟周期取一次;out是将inpu_grant取到的值进行乘1/3/7/8,并且每个时钟周期乘一个。

项目经验:

        在FPGA中实现乘法器确实需要消耗一定的资源。这包括逻辑门、触发器、乘法器等。不同的乘法器实现方法消耗的资源有所不同。例如,查找表乘法器需要较大的存储空间,但可以减少乘法操作的逻辑门数量;流水线乘法器需要较多的触发器,但可以实现较高的吞吐量。

        在FPGA的设计中,如果直接将两个数相乘,会占用大量的LUT逻辑资源,而且会减慢硬件的运算速度。因此,在软件设计中两个数的相乘可以直接使用“*”,但在FPGA的设计中,需要采用更复杂的实现方式来处理乘法操作,以节约资源并提高运算速度。

        总的来说,虽然乘法操作在FPGA中会消耗一定的资源,但通过合理的实现方式,可以有效地利用资源并提高系统的性能和效率。

算法设计:

        设 a=1;故:

                a << 1 = 2 = a * 2 ;

                a << 2 = 4 = a * 2*2 = a * 4;    

                a << 3 = 8 = a * 2*2*2 = a* 8;

                a << 4 = 16 = a * 2*2*2*2 = a*16;

            以此类推,乘1/3/7/8,得;

                a = a = a * 1;

                a = (a << 1) + a = a * 3;

                a = (a << 2) - a = a * 7;

                a = a << 2 = a * 8;

 实现代码:

`timescale 1ns/1ns
module multi_sel(
    input  wire clk,       
    input  wire rst,
    input  wire [7:0]d,
    output reg  input_grant,
    output reg [10:0]out
);
reg [1:0]cnt;
reg [7:0]tmp;
always @(posedge clk or negedge rst)
begin
    if(!rst)
    begin
        cnt <= 0;
    end
    else
    begin
        cnt <= cnt + 1;
    end
end

always @(posedge clk or negedge rst)
begin
    if(!rst)
    begin
        out <= 0;
        input_grant <= 0;
        tmp <= 0;
    end
    else
    begin
        case(cnt)
            0:  begin
                input_grant <= 1;
                out <= d;
                tmp <= d;
            end
            1:  begin
                input_grant <= 0;
                out <= (tmp << 1) + tmp; 
            end
            2:  begin
                input_grant <= 0;
                out <= (tmp << 3) - tmp;
            end
            3:  begin
                input_grant <= 0;
                out <= tmp << 3;
            end
        endcase 
    end
end
endmodule

前仿真代码:

`timescale 1ns / 1ps

module test_sel();
    reg clk;       
    reg rst;
    reg [7:0]d;

always  begin
    clk = 1;
    #10;
    clk = 0;
    #10;
end

initial begin
    rst = 0;
    d = 143;
    #20 
    rst = 1;
    #80 
    d = 7;
    #80 
    d = 6;
    #20 
    d = 128;
    #20 
    d = 129;
end

multi_sel multi_sel_init(
    .clk(clk),      
    .rst(rst),
    .d(d)
);

endmodule

 测试结果:

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

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

相关文章

关于编程的一些小小记录

这里记录一些关于编程的小技巧吧&#xff0c;算是个记录 1&#xff0c;vs同时有多个cpp文件怎么办&#xff1f; 我们只想运行第一个cpp文件&#xff0c;那么怎么做呢&#xff1f; 其实很简单&#xff0c;单击你不想让之运行的文件&#xff0c;点击最下面的属性 最后设置为这样…

数学建模day15-时间序列分析

时间序列也称动态序列&#xff0c;是指将某种现象的指标数值按照时间顺序排列而成的数值序列。时间序列分析大致可分成三大部分&#xff0c;分别是描述过去、分析规律和预测未来&#xff0c;本讲将主要介绍时间序列分析中常用的三种模型&#xff1a;季节分解、指数平滑方法和AR…

最小花费-银行转账-图的最短路-超详细解析注释

最小花费-银行转账-图的最短路-超详细解析注释 【题目描述】 在n个人中&#xff0c;某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费&#xff0c;请问A最少需要多少钱使得转账后B收到100元。 …

【Linux】Ubuntu 解压 zip、z01、z02等压缩文件的方法,Linux如何解压分卷压缩的

zip分卷压缩&#xff0c;在windows上压缩来的&#xff0c;如何解压这种文件&#xff1a; -rw-rw-r-- 1 20401094656 Dec 10 20:06 FFHQ.z01 -rw-rw-r-- 1 20401094656 Dec 10 20:10 FFHQ.z02 -rw-rw-r-- 1 20401094656 Dec 10 23:22 FFHQ.z03 -rw-rw-r-- 1 20401094656 Dec 10…

机器人跟踪性能量化指标

衡量机械臂关节轨迹跟踪控制的性能可以通过以下几个方面来进行&#xff1a; 跟踪精度&#xff1a;这是衡量机械臂关节轨迹跟踪控制性能的最重要的指标。它反映了机械臂实际运动轨迹与期望运动轨迹之间的偏差。跟踪精度越高&#xff0c;说明机械臂的控制性能越好。运动范围&…

设计模式——1_2 组合(Composite)

君子和而不同&#xff0c;小人同而不和 ——《论语》 文章目录 定义图纸一个例子&#xff1a;折算产品的成本BomMessageBomTree 写在后面的碎碎念职责分离非树状的组合模式组合和迭代器姑妄言之 定义 将对象组合成树状结构以表示“部分-整体”的层次结构。组合模式使得用户对单…

Python数据结构——字符串

目录 一、字符串的不变性 二、字符串的常见方法介绍 三、字符串对象的join()和split()方法 一、字符串的不变性 1、属于不可变对象&#xff0c;不能通过索引操作来改变字符串对象本身 s I like Python s[7] p 要修改字符串&#xff0c;需要使用字符串的replace()方法&am…

Python基础知识:整理16 使用pyecharts实现动态柱状图

1 基础柱状图的构建 from pyecharts.charts import Barbar Bar()bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]) bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90]) bar.ad…

一个用于批量给图片增加水印的Python库

本文推荐一个开源免费Python脚本&#xff0c;可以在指定目录及其子目录中批量给图像添加水印&#xff0c;当然&#xff0c;你也可以集成到你的Web应用中。 给图片、视频增加水印以确认版权或者增加效果&#xff0c;是在媒体内容信息经常需要用到的技术。本文推荐一个开源免费P…

Redis集群(主从复制)

主从复制&#xff1a;是指将一台 Redis 服务器的数据&#xff0c;复制到其他的 Redis 服务器。 前者称为主节点(master)&#xff0c;后者称为从节点(slave),数据的复制是单向的&#xff0c;只能 由主节点到从节点。 可以实现数据备份。即使当其中一台机器宕机其他机器还可以正…

如何运用AR技术提升制造效率?这里有答案!

当谈及AR技术在工业领域的应用&#xff0c;首先让人想到的是它为企业带来的巨大变革。从工业设计和制造到设备维护和维修&#xff0c;再到培训和技能传承以及设备操作和监测&#xff0c;AR技术凭借其独特的方式&#xff0c;帮助企业实现更高效的生产和运营。通过这些环节的优化…

office办公技能|word中的常见通配符使用

一、删除Word中含有指定内容的整行 操作方法&#xff1a; 1、快捷键 CtrlH&#xff0c;打开Word的查找替换窗口&#xff0c;单击【更多】按钮&#xff0c;勾选“使用通配符”。 2、在查找内容处&#xff0c;输入“替换内容*^13”&#xff0c;替换为处什么都不填。 3、单击【…

MySQL系列之数据导入导出

前言 大数据与云计算作为当今时代&#xff0c;数据要素发展的“动力引擎”&#xff0c;已经走进了社会生活的方方方面。而背后承载的云服务或数据服务的高效运转&#xff0c;起了决定作用。 作为数据存储的重要工具&#xff0c;数据库的品类和特性也日新月异。从树型、网络型…

第380场周赛挑战:二分,数位dp和KMP算法的综合运用

比赛地址 卡在第三题了&#xff0c;应该看看第4题kmp套模版的 一、最大频率元素计数 class Solution:def maxFrequencyElements(self, nums: List[int]) -> int:frequency {} # 哈希表用于统计频率max_freq 0 # 存储最大频率# 统计每个元素的频率for num in nums:i…

机器学习周报第28周

目录 摘要Abstract一、文献阅读1.题目&#xff1a;2.摘要3.问题描述4.过去方案5.论文方案6.论文模型7.相关代码 摘要 本周阅读了一篇混沌时间序列预测的论文&#xff0c;论文模型主要使用的是时间卷积网络&#xff08;Temporal Convolutional Network&#xff0c;TCN&#xff…

1.3K Star,让发送短信变的更简单

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;我的公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值。 前言 在日常的开发过程中&#xff0c;短信的发送经常使用&#xff08;尤其是中小型的外…

Java智能导诊系统 (3D人体导医)源码

智能导诊是一种利用人工智能技术来帮助患者进行自助问询及挂号服务的系统。通过智能导诊系统&#xff0c;患者可以输入自身疾病的症状表现&#xff0c;或选择身体部位&#xff0c;在系统的多维度计算下&#xff0c;系统会根据患者提供的信息精准推荐科室&#xff0c;并引导患者…

数据库备份脚本嘎嘎香,被秀到了!

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

c++qt-基本组件

1. Designer 设计师&#xff08;掌握&#xff09; Qt包含了一个Designer程序&#xff0c;用于通过可视化界面设计开发界面&#xff0c;保存的文件格式为.ui&#xff08;界面文件&#xff09;。界面文件内部使用xml语法的标签式语言。 在Qt Creator中创建项目时&#xff0c;选中…