FPGA - 240102 - FPGA期末速成

news2025/7/11 5:29:59
  • TAG - F P G A 、期末、速成 FPGA、期末、速成 FPGA、期末、速成

  • // – 习题1 – //
  • CPLD(Complex Programmable Logic Device)是 Complex PLD 的简称,一种较 PLD 为复杂的逻辑元件。
  • CPLD 逻辑资源多寄存器少,FPGA 逻辑弱而寄存器多,这正好与控制密集型系统与数据密集型系统相对应。
  • CPLD 是基于乘积项结构的可编程逻辑器件,FPGA 是基于查找表结构的可编程逻辑器件。
  • //
  • 在 FPGA(Field-Programmable Gate Array —— 现场可编程门阵列)中,使用 LUT(查找表)来实现组合逻辑电路的功能。
  • 在 FPGA 器件中,LUT 主要用于实现组合电路,在实现结构上一个 4 输入的查找表相当于一个 16 位的RAM。
  • 通常而言,FPGA 逻辑块之间是分布式互连,其特点是等延时,而 CPLD 逻辑块之间是集中式的互连,其延时与系统布局有关。
  • FPGA 一般是基于 SRAM 的配置方式,配置方法相对灵活。
  • 基于SRAM(Static Random-Access Memory)的 FPGA 器件之所以需要在每次上电后进行一次配置,是因为 SRAM 是一种易失性存储器,其存储的配置信息会在断电时丢失。
  • //
  • ASIC(Application-Specific Integrated Circuit)是指应用特定集成电路,是一种定制化设计的集成电路,专为特定应用领域或任务而设计。
  • //
  • GAL 是比 FPGA 逻辑规模更小的可编程逻辑器件。
  • GAL(Generic Array Logic)是一种可编程逻辑器件,属于复杂的数字集成电路(IC)家族。它是一种与FPGA(Field-Programmable Gate Array)类似的可编程逻辑设备,但规模相对较小。
  • //
  • PLA(Programmable Logic Array):PLA 包含一个可编程的 AND 阵列和一个可编程的 OR 阵列。
  • PAL:在 PAL 中,用户主要通过编程 AND 阵列来实现逻辑功能,而 OR 阵列是固定的,无法由用户直接编程。
  • SPLD(Simple Programmable Logic Device)
  • PLA、PAL、GAL 等 SPLD 器件更适合于实现大规模的组合逻辑而不是时序逻辑电路。
  • //
  • RTL 是 Register Transfer Level(寄存器传输级)的缩写,它是数字电路设计的一种抽象级别。RTL 描述了数字电路中的数据流和控制流,强调在时钟周期内数据是如何从一个寄存器传输到另一个寄存器的。
  • //
  • 若 Verilog HDL 模块中的输入/输出信号类型缺省,则该信号为 wire 型,具有无数据存储特性。
  • 在数字电路设计中,双向信号通常用于特定情况,如总线或双工通信,但在模块级别的设计中,一般使用单向信号来更好地控制信号的流向。
  • //
  • = 阻塞赋值:顺序执行
  • <= 非阻塞赋值:并行执行
  • //
  • A. 系统级描述 B. 算法级描述 C. 门级描述 D. RTL级描述
    用Verilog语言,四种描述分别描述一位全加器
// A. 系统级描述:
module full_adder (
  input A, B, Cin,
  output Sum, Cout
);
  // 系统级描述中可以使用高级的抽象,不关注具体电路实现细节
  assign {Sum, Cout} = A + B + Cin;
endmodule
// B. 算法级描述:
module full_adder (
  input A, B, Cin,
  output Sum, Cout
);
  // 算法级描述关注操作的算法,但不涉及具体的硬件结构
  always_comb begin
    Sum = A ^ B ^ Cin;
    Cout = (A & B) | (B & Cin) | (A & Cin);
  end
endmodule
// C. 门级描述:
module full_adder (
  input A, B, Cin,
  output Sum, Cout
);
  // 门级描述涉及具体的逻辑门实现
  wire w1, w2, w3, w4;

  assign w1 = A ^ B;
  assign w2 = w1 ^ Cin;
  assign w3 = A & B;
  assign w4 = w3 | (w1 & Cin);

  assign {Sum, Cout} = {w2, w4};
endmodule
// D. RTL级描述(寄存器传输级描述):
module full_adder (
  input wire A, B, Cin,
  output wire Sum, Cout
);
  // RTL级描述涉及到数据传输和寄存器的操作
  reg [1:0] sum_reg;

  always @(posedge clk or posedge rst) begin
    if (rst) begin
      sum_reg <= 2'b0;
    end else begin
      sum_reg <= A + B + Cin;
    end
  end

  assign {Sum, Cout} = sum_reg;
endmodule

这些描述层级从高到低,系统级描述抽象程度高,而RTL级描述更接近硬件实现。

  • // 1
    1. 在FPGA构成的数字系统中,为什么通常需要要配备一个PROM或E2PROM?
  • 因为常用的FPGA的结构是基于SRAM的,掉电后芯片内的信息将消失,所以配备一个PROM或E2PROM,使得上电后,FPGA的信息由外部加载到芯片中,使得FPGA成为用户需要功能的芯片。
  • // 2
    1. FPGA的基本结构主要包括哪些组成部分?
  • 输入/输出模块IOB,用于存放编程数据的SRAM,可编程逻辑块CLB,互连资源IR。
  • // 3
    1. 什么是组合逻辑和时序逻辑?两者的区别有哪些?
  • 组合逻辑指有常见逻辑门构成的,不需要时钟驱动的电路;
  • 时序电路是指包含寄存器等需要时钟驱动的电路;
  • 两者最主要的区别在于是否需要时钟触发。
  • // 4
    1. 简述阻塞赋值与非阻塞赋值的不同。
  • 符号分别为“=”和“<=”;
  • (1)阻塞赋值:赋值立刻完成;完成该赋值语句后才能执行下一句的操作;硬件没有对应的电路,因而综合结果未知。
  • (2)非阻塞赋值:赋值不是立刻完成的,而是在块结束时才完成;块内的多条赋值语句在块结束时同时赋值;硬件有对应的电路。
  • // 5
    1. 简述Verilog HD设计中不同层次的抽象。
  • Verilog HD设计中,抽象级别可以分为五级:
  • (1)系统级(system level): 用高级语言结构(如case语句)实现的设计模块外部性能的模型;
  • (2)算法级(algorithmic level): 用高级语言结构实现的设计算法模型(写出逻辑表达式);
  • (3)RTL级(register transfer level): 描述数据在寄存器之间流动和如何处理这些数据的模型;
  • (4)门级(gate level): 描述逻辑门(如与门、非门、或门、与非门、三态门等)以及逻辑门之间连接的模型;
  • (5)开关级(switch level): 描述器件中三极管和储存节点及其之间连接的模型。
  • // 1
    1. 用Verilog HDL设计2位sel控制的4选1多路选择器。 模块名:module mux4_1 (out, in0, in1, in2, in3, sel);
module mux4_1 (
	output reg out, 
	input wire in0, in1, in2, in3, 
	input wire [1:0] sel
);

always @(sel or in0 or in1 or in2 or in3) begin
    case (sel)
        2'b00: out = in0;
        2'b01: out = in1;
        2'b10: out = in2;
        2'b11: out = in3;
        default: out = 1'b0; // Optional default case
    endcase
end

endmodule
  • // 2
    1. 用Verilog HDL设计一个分频电路,要求输入、输出信号分别为10MHz和500KHz的方波,具有异步清零功能。 模块名:module fdivision(RESET,F10M,F500K);
<占个坑>
  • // 3
    1. 用Verilog HDL设计七人投票表决器。 模块名: module voter7(pass,vote);
module voter7 (
  input [6:0] vote, // 输入七个人的投票,使用二进制编码表示
  output reg pass   // 输出表决结果
);

always @(posedge clk or negedge rst) begin
  if (~rst) begin
    // 在复位时可以对pass进行初始化,例如 pass <= 1'b0;
  end else begin
    // 在这里实现表决逻辑,这里只是一个简单的例子
    // 如果超过半数的人投赞成票(1),则 pass 置为 1,否则为 0
    pass <= (vote >= 4);
  end
end

endmodule
  • // 4
    1. 用Verilog HDL设计8位的同步置数同步清零计数器: 模块名: module count4(out, data, load, reset, clk);
module count4(
  output reg [7:0] out,
  input [7:0] data,
  input load,
  input reset,
  input clk
);

  always @(posedge clk or posedge reset) begin
    if (reset) begin
      out <= 8'b0; // 同步清零
    end else if (load) begin
      out <= data; // 同步置数
    end else begin
      out <= out + 1; // 计数
    end
  end

endmodule

  • // – 习题2 – //
  • 过程语句 - always
  • 连续语句 - assign
  • //
  • 块语句有两种,一种是begin-end语句,用来标志顺序执行的语句;一种是fork-join语句,通常用来标志并行执行的语句。
  • //
  • 在EDA的IP核中,软IP是可编程语言描述的,灵活性较高;固IP结合了硬件和嵌入式软件;硬IP以硬件电路形式存在,性能最高。
  • //
  • MAX7000系列是由Altera(现在是Intel)公司生产的CPLD(可编程逻辑器件)而不是FPGA(现场可编程门阵列)结构。
  • //
  • 不完整的 if 语句,其综合结果可实现 时序逻辑电路。
  • // 1
    1. 请写出以下英文缩写的中文全称:EDA,ASIC,HDL,FPGA,CPLD。
  • EDA: 电子设计自动化(Electronic Design Automation)
  • ASIC: 定制集成电路(Application-Specific Integrated Circuit)
  • HDL: 硬件描述语言(Hardware Description Language)
  • FPGA: 现场可编程门阵列(Field-Programmable Gate Array)
  • CPLD: 可编程逻辑器件(Complex Programmable Logic Device)
  • // 2
    1. 简述Verilog HD设计中的结构描述、数据流描述和行为描述。
  • 结构描述:通过调用库中元件(如逻辑门、晶体管)或设计好的模块来完成设计实体功能,描述只表示元件(模块)和元件(模块)之间的互联。
  • 数据流(Data Flow)描述:描述数据在寄存器、逻辑门之间传输和处理的过程,主要使用持续赋值语句(assign),通过表达式、操作符和操作数来设计电路。
  • 行为(Behavioral)描述:对设计实体的数学模型描述,无需知道具体电路结构,只需描述清楚输入与输出信号的行为。
  • //
  • 一般来说,与门、或门、与非门、或非门等支持多个输入,而非门、异或门、异或非门等通常只有一个或两个输入。
  • //
// 结构描述:(门原语)
module FullAdder (input A, input B, input Cin, output Sum, output Cout);
  xor f1(t1, A, B);
  xor f2(sum, t1, Cin);
  and f3(t3, A, B);
  and f4(t4, A, Cin);
  and f5(t5, B, Cin);
  or f6(Cout, t3, t4, t5);
endmodule
// 数据流描述:(表达式)
module FullAdder (input A, input B, input Cin, output Sum, output Cout);
  assign {Cout, Sum} = A + B + Cin;
endmodule
// 行为描述:(块语句等高级抽象语言)
module FullAdder (input A, input B, input Cin, output reg Sum, output reg Cout);
  always @(A or B or Cin) begin
    Sum = A ^ B ^ Cin;
    Cout = (A & B) | (B & Cin) | (A & Cin);
  end
endmodule
  • // 3
  • 按要求给出Verilog语言代码
    程序的逻辑功能为:8位的同步清零、同步置数的计数器。
    程序注释:
    ①定义模块名为AAA,端口为out、data、load、reset、clk
    ②定义out为输出端口,out为8位宽的二进制数
    ③定义data为输入端口,data为8位宽的二进制数
    ④定义load、reset、clk为输入端口
    ⑤定义out为八位宽的reg型变量
    ⑥过程语句,敏感变量为时钟clk,上升沿触发方式
    ⑦条件语句,同步清零信号为低电平时,对out清零
    ⑧条件语句,同步置数信号为高电平时,把data的值赋给out,完成置数操作
    ⑨若同步清零信号、同步置数信号无效时,完成计数操作。
module AAA(
  output reg [7:0] out,
  input [7:0] data,
  input load,
  input reset,
  input clk
);
	// 同步不需要 ` or negedge reset or posedge load`,不然就变成异步了
  always @(posedge clk) begin
    if (~reset) begin
      out <= 8'b00000000; // 同步清零
    end else if (load) begin
      out <= data; // 同步置数
    end else begin
      out <= out + 1; // 计数操作
    end
  end

endmodule
  • // 4
  • Moore 莫尔型:输出只依赖于状态而不依赖于其输入信号
  • Mealy 米里型:输出不仅依赖状态而且依赖于它的输入
  • //
  • 利用有限状态机,以格雷码编码方式设计一个从输出信号序列中检测出101信号的序列检测器,其状态转移图如下图所示。 模块名:module fsm_seq101(clk, clr, x, z);
module fsm_seq101(
	input clk, clr, x, 
	output reg z
);

parameter s0 = 2'b 00;
parameter s1 = 2'b 01;
parameter s2 = 2'b 11;
parameter s3 = 2'b 10;

reg [1:0] now,next;

always @(posegde clk or negedge clr) begin
	if (~clr) now = s0;
	else now = next;
end

always @(posegde clk or negedge clr) begin
	if (~clr) next = s0;
	else begin
		case (x)	// 只是表示当前进行到第几步而已
			s0: x ? next = s1 : s0;
			s1: x ? next = s1 : s2;
			s2: x ? next = s3 : s0;
			s3: x ? next = s1 : s2;
			default: next = s0;
		endcase
	end
end

always @(posedge clk or negedge clr) begin
	if (~clr) z = 0;
	else begin
		z = now == s3 ? 1 : 0;
	end
end

endmodule

  • // – 习题3 – //
  • 1.用for语句和移位运算符实现两个8位二进制数a和b的乘法运算。 模块名:module mult_8(outcome, a, b);
module mult_8(
  output reg [15:0] outcome,  // 输出乘法结果,16位宽度
  input [7:0] a,              // 输入数 a,8位宽度
  input [7:0] b               // 输入数 b,8位宽度
);
  reg [15:0] temp,i;  // 用于保存中间结果
  
  always @(a or b) begin
    temp = 16'b0;   // 初始化中间结果为0

    for (i = 0; i < 8; i = i + 1) begin
      if (b[i])       // 如果 b 的当前位为1,则将 a 左移相应的位数,并加到中间结果上
        temp = temp + (a << i);
    end

    outcome = temp;   // 将最终结果输出
  end
endmodule
  • 2.用Verilog HDL设计8位的带异步清零(低电平有效)、同步置数(高电平有效)的计数器。 模块名: module count8(out, data, load, reset, clk);
module count8(
  output reg [7:0] out,  // 输出计数器结果
  input [7:0] data,      // 同步置数数据
  input load,            // 同步置数使能信号,高电平有效
  input reset,           // 异步清零信号,低电平有效
  input clk              // 时钟信号
);
  always_ff @(posedge clk or negedge reset) begin
    if (~reset)           // 异步清零
      out <= 8'b0;
    else if (load)       // 同步置数
      out <= data;
    else
      out <= out + 1;    // 正常计数
  end
endmodule

实现细节


参考示意图

  • 1
  • 2
  • 3

参考链接


作者 | 乐意奥AI

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

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

相关文章

TemporalKit的纯手动安装

最近在用本地SD安装temporalkit插件 本地安装插件最常见的问题就是&#xff0c;GitCommandError:… 原因就是&#xff0c;没有科学上网&#xff0c;而且即使搭了ladder&#xff0c;在SD的“从网址上安装”或是“插件安装”都不行&#xff0c;都不行&#xff01;&#xff01;&am…

PMP考试的通过标准是什么?

PMP 新考纲一共是 180道题&#xff0c;答对 108道就通过了&#xff0c;具体怎么看&#xff1f; 登录网站查询&#xff1a; 第一步&#xff1a;登录PMI网站&#xff1a;www.pmi.org 第二步&#xff1a;进入Dashboard&#xff1a; 第三步&#xff1a;点击菜单Certifications - …

C#自动删除20天前文件夹图片

资料夹如下&#xff0c;需求为自动删除20天前保存的图片 如下为该方法函数&#xff0c;保留天数可以自定义 public static void CleanFile(){string path $"{SvMaster.DataPath}\\Image";\\文件夹路径DirectoryInfo dir new DirectoryInfo(path);FileSystemInfo[] …

XD6500S一款串口SiP模块 射频LoRa芯片 内置sx1262

1.1产品介绍 XD6500S是一款集射频前端和LoRa射频于一体的LoRa SIP模块系列收发器SX1262 senies&#xff0c;支持LoRa⑧和FSK调制。LoRa技术是一种扩频协议优化低数据速率&#xff0c;超长距离和超低功耗用于LPWAN应用的通信。 XD6500S设计具有4.2 mA的有效接收电流消耗&#…

一创聚宽停止服务,散户可以选择它!

第一创业和聚宽停止合作&#xff01;还有什么量化平台可选&#xff1f; 先了解背景&#xff1a; 从2023年9月25日起&#xff0c;一创聚宽的量化交易平台暂停开通交易权限&#xff0c;到2023年12月29日&#xff0c;一创聚宽量化交易平台将停止提供所有服务。这一消息对于之前使…

IPv6有状态地址自动配置(DHCPv6)

IPv6有状态地址自动配置 IPv6实现了对无状态地址自动配置的支持。这种不需要特殊服务器的地址自动配置方式有着极大的好处。使用起来也很方便,而在IPv4时代曾经是地址自动分配的首选方式的DHCP好像显得有些没落了。但是,DHCP作为有状态地址自动配置的方式之一,依旧有着无状…

echarts实现点击不同的柱子实现类目的不同名字

实现效果如下图: 首先实现echarts堆叠柱状图数据为0的不占用x轴空间 option {tooltip: {trigger: axis,axisPointer: {type: shadow},},legend: {},grid: {left: 3%,right: 4%,bottom: 3%,containLabel: true},xAxis: [{type: category,position: bottom,data: [园区内, 园区…

3C电子制造:智慧物流引领产业升级

在当今科技飞速发展的时代&#xff0c;3C电子制造行业正面临着一系列挑战和机遇。市场需求的多变和技术革新的加速&#xff0c;使得企业必须不断创新和升级。在这个过程中&#xff0c;智慧物流成为了一个关键的环节&#xff0c;它能够有效地提高生产效率、降低成本并增强企业的…

无心剑小诗《银婚颂》

银婚颂 二十五个春秋共一轮 你是岁月赠予我最亮的星辰 从青春燃烧到岁月沉稳 你的笑颜,我永恒的晨昏 春花烂漫是你眼里的璀璨 夏日蝉鸣是彼此故事的和弦 秋叶纷飞诉说漫天情缘 冬雪纯洁见证温暖的牵绊 月光洒满每段共享小径 星光点染每个深情的夜晚 风雨同舟铸就铜墙铁壁 携…

专属定制适合个人的知识付费平台,打造个性化品牌与自主管理体验

明理信息科技知识付费saas租户平台 在当今数字化时代&#xff0c;知识付费平台已经成为人们获取专业知识、提升自身素质的重要渠道。然而&#xff0c;公共知识付费平台虽然内容丰富&#xff0c;但难以满足个人或企业个性化的需求和品牌打造。因此&#xff0c;我们提出了专属定…

易基因:ChIP-seq等揭示Runx2通过转录调控Itgav表达激活肝星状细胞以促进肝纤维化|科研进展

这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 肌成纤维细胞&#xff08;myofibroblasts&#xff09;主要由肝脏中活化的肝星状细胞(hepatic stellate cells HSC)组成&#xff0c;在肝纤维化进展中发挥着核心作用。由于肌成纤维细胞主要负责细胞外基质蛋…

neo4j图数据库安装和测试

neo4j图数据库安装和测试 1. 下载合适的neo4j软件版本。 https://we-yun.com/doc/neo4j/ https://neo4j.com/deployment-center/#enterprise 2. 下载JAVAJDK 由于neo4j是一个用Java编写的图形数据库&#xff0c;因此在安装和运行Neo4j之前&#xff0c;需要先安装Java Developm…

H5定时打卡领取奖励系统PHP源码,附带搭建教程

搭建教程 环境采用&#xff1a;linux的服务器系统 Nginx 1.18.0 MySQL 5.6.49 PHP-7.2 创建一个网站绑定上域名PHP版本选择7.2 这里不要绑定错了 创建好&#xff0c;我们进入到网站根目录&#xff0c;把源码打包压缩上传进去 压缩格式要用zip 不能有中文&#xff0c;…

《软件项目接口安全设计规范》

1.token授权机制 2.https传输加密 3.接口调用防滥用 4.日志审计里监控 5.开发测试环境隔离&#xff0c;脱敏处理 6.数据库运维监控审计 软件全套文档&#xff1a;软件开发全套资料-CSDN博客

javaweb项目jar包部署

装好系统后直接先安装java环境 方法一&#xff1a;使用OpenJDK安装Java 更新系统软件包列表&#xff1a; sudo yum update安装OpenJDK&#xff1a; sudo yum install java-1.8.0-openjdk-devel # Java 8安装如果你需要其他版本的Java&#xff0c;你可以替换 1.8.0 为其他版本…

奇数码问题

title: 奇数码问题 date: 2024-01-05 11:52:04 tags: 逆序对 cstefories: 算法进阶指南 题目大意 解题思路 将二维转化为一维&#xff0c;求他的逆序对&#xff0c;如果逆序对的奇偶性相同&#xff0c;则能够实现。 代码实现 #include<iostream> #include<string.h&…

微服务应用可观测性解决方案介绍

目录 一、可观测性出现背景 二、什么是可观测性&#xff08;Observability&#xff09; 2.1 可观测性的不同解析 2.1.1 百度维基解析 2.1.2 IBM解析 2.1.3 CNCF&#xff08;云原生计算机基金会&#xff09;组织解析 2.1.4 我的个人理解 2.2 可观测性和监控的区别与联系 …

产业认可 | 开源网安荣获 CCIA“2023 年度优秀会员单位”

​1月4日&#xff0c;“2023年度中国网络安全产业联盟成员大会暨理事会”在京召开&#xff0c;开源网安作为成员单位受邀出席本次大会。 在会上&#xff0c;联盟发布了关于2023年度表彰先进的决定&#xff0c;作为中国软件安全领域的创领者&#xff0c;开源网安在技术、实践和创…

docker容器化部署及数据持久化

1、加载MySQL 5.7的镜像 docker load -i mysql-5.7.tar.gz 2、执⾏命令启动MySQL容器&#xff1a; sh start-mysql.sh docker run -itd \ --name mysql \ --restart always \ -p 30036:3306 \ -v $PWD/mysql/config-file.cnf:/etc/mysql/conf.d/config-file.cnf \ -v $PWD/m…

初识对抗生成网络(GAN)

在研究语义通信的时候&#xff0c;发现解码端很多都是用GAN或基于GAN来完成的。带着对GAN的好奇&#xff0c;对GAN进行了一个初步学习。这篇文章介绍一下和GAN相关的一些常识吧~   本文围绕以下几个内容展开&#xff1a;     1.什么是GAN&#xff1f;     2.为什么要…