0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Vivado使用技巧-HDL编写

FPGA设计论坛 来源:未知 2022-12-28 17:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Vivado中进行HDL代码设计,不仅需要描述数字逻辑电路中的常用功能,还要考虑如何发挥Xilinx器件的架构优势。目前常用的HDL语言有三种。

(1)VHDL语言的优势有:

  • 语法规则更加严格;

  • 在HDL源代码中初始化RAM组件更容易;

  • 支持package;

  • 自定义类型;

  • 枚举类型;

  • 没有reg和wire之间的混淆。

(2)Verilog语言的优势有:

  • C语言类似的语法;

  • 代码结构更紧凑;

  • 支持块注释(老版VHDL不支持);

  • 没有像VHDL一样的重组件实例化。

(3)SystemVerilog语言的优势有:

  • 与Verilog相比代码结构更加紧凑;

  • 结构体和枚举类型有更好的扩展性;

  • 更高抽象级别的接口

  • Vivado综合支持SystemVerilog 2012

以博主接触的情况看,目前使用最广泛的应该是Verilog语言,替代VHDL成为国内大学教学的主流。SystemVerilog其实有更高级别的描述能力,无论是设计还是仿真性能也更强大,目前很多国外大学都使用SystemVerilog作为教学语言。本文以Verilog语言为基础讲述HDL代码编写技巧。

1.触发器、寄存器和锁存器

Vivado综合可以识别出带有如下控制信号的触发器(Flip-Flop)和寄存器(register):上升沿或下降沿时钟、异步置位或复位信号、同步置位或复位信号、时钟使能信号。Verilog中对应着always块,其敏感列表中应该包含时钟信号和所有异步控制信号。

使用HDL代码设计触发器、寄存器时注意如下基本规则:

  • 寄存器不要异步置位/复位,否则在FPGA内找不到对应的资源来实现此功能,会被优化为其它方式实现。

  • 触发器不要同时置位和复位。Xilinx的触发器原语不会同时带有置位和复位信号,这样做会对面积和性能产生不利影响。

  • 尽量避免使用置位/复位逻辑。可以采用其它方法以更少的代价达到同样 的效果,比如利用电路全局复位来定义初始化内容。

  • 触发器控制信号的输入应总是高电平有效。如果设置为低电平有效,会插入一个反相器,对电路性能会产生不利影响。

Vivado综合工具根据HDL代码会选择4种寄存器原语:

  • FDCE:带有时钟使能和异步清0的D触发器;

  • FDPE:带有时钟使能和异步预置(Preset)的D触发器;

  • FDSE:带有时钟使能和同步置位的D触发器;

  • FDRE:带有时钟使能和同步复位的D触发器;

寄存器的内容会在电路上电时初始化,因此在申明信号时最好设定一个默认值。综合后,报告中可以看到寄存器的使用情况。下面给出一个寄存器的代码实例:

  1. //上升沿时钟、高电平有效同步清0、高电平有效时钟使能8Bits寄存器

  2. module registers_1(

  3. input [7:0] d_in,

  4. input ce, clk, clr,

  5. output [7:0] dout

  6. );


  7. reg [7:0] d_reg;

  8. always @ (posedge clk)

  9. if(clr) d_reg <= 8'b0;

  10. else if(ce) d_reg <= d_in;


  11. assign dout = d_reg;

  12. endmodule

Vivado综合还会报告检测出的锁存器(Latches),通常这些锁存器是由HDL代码设计错误引起的,比如if或case状态不完整。综合会为检测出的锁存器报告一个WARNING(Synth 8-327)。下面给出一个锁存器的代码示例:

  1. //带有Postive Gate和异步复位的锁存器

  2. module latches (

  3. input G,

  4. input D,

  5. input CLR,

  6. output reg Q

  7. );


  8. always @ *

  9. if(CLR) Q = 0;

  10. else if(G) Q = D;


  11. endmodule

2.三态缓冲器

三态缓冲器(Three-state buffer),又称为三态门、三态驱动器,其三态输出受到使能输出端的控制,当使能输出有效时,器件实现正常逻辑状态输出(逻辑0、逻辑1),当使能输出无效时,输出处于高阻状态,即等效于与所连的电路断开。

三态缓冲器(Tristate buffer)通常由一个信号或一个if-else结构来建模,缓冲器可以用来驱动内部总线,也可以驱动外部板子上的总线。如果使用if-else结构,其中一个分支需要给信号赋值为高阻状态

当三态缓冲器通过管脚驱动外部总线时,使用OBUFT原语实现;当驱动内部总线时,使用BUFT原语,综合工具会将其转换为用LUT实现的逻辑电路。下面给出处理三态缓冲器的代码示例:

  1. //使用always块描述三态

  2. module tristates_1 (

  3. input T, I,

  4. output reg O

  5. );


  6. always @(T or I)

  7. if (~T) O = I;

  8. else O = 1'bZ;


  9. endmodule


  10. //使用并行赋值描述三态

  11. module tristates_2 (

  12. input T, I,

  13. output O);


  14. assign O = (~T) ? I: 1'bZ;


  15. endmodule

3.移位寄存器

一个移位寄存器(Shift Register)就是一个触发器链,允许数据在一个固定的延迟段之间传递,也叫静态移位寄存器。其通常包括:时钟信号、可选的时钟使能信号、串行数据输入和输出。

Vivado综合可以用SRL类型的资源实现移位寄存器,如SRL16ESRLC32E。根据移位寄存器的长度,综合时会选择采用一个SRL类型原语实现,或采用级联 的SRLC类型原语实现。下面给出移位寄存器的代码示例:

  1. // 32Bits移位寄存器,上升沿时钟,高电平有效时钟使能信号

  2. // 使用连接运算符{}实现

  3. module shift_registers_0 (

  4. input clk, clken, SI,

  5. output SO

  6. );


  7. parameter WIDTH = 32;

  8. reg [WIDTH-1:0] shreg;


  9. always @(posedge clk)

  10. if (clken) shreg = {shreg[WIDTH-2:0], SI};


  11. assign SO = shreg[WIDTH-1];


  12. endmodule


  13. // 使用for循环实现

  14. module shift_registers_0 (

  15. input clk, clken, SI,

  16. output SO

  17. );


  18. parameter WIDTH = 32;

  19. reg [WIDTH-1:0] shreg;


  20. integer i;

  21. always @(posedge clk)

  22. if (clken) begin

  23. for (i = 0; i < WIDTH-1; i = i+1)

  24. shreg[i+1] <= shreg[i];

  25. shreg[0] <= SI;

  26. end


  27. assign SO = shreg[WIDTH-1];


  28. endmodule

4.动态移位寄存器

动态移位寄存器(Dynamic Shift register)是指电路操作期间移位寄存器的长度可以改变。可以采用如下两种结构实现:

  • 一组触发器链,最大长度可以改变;

  • 一个多路选择器,在给定时钟周期选择从传递链中提取数据的某一段。结构框图如下图所示:

Verilog示例代码如下所示:

  1. // 32-bit 动态移位寄存器

  2. module dynamic_shift_register_1 (CLK, CE, SEL, SI, DO);


  3. parameter SELWIDTH = 5;

  4. input CLK, CE, SI;

  5. input [SELWIDTH-1:0] SEL;

  6. output DO;


  7. localparam DATAWIDTH = 2**SELWIDTH;

  8. reg [DATAWIDTH-1:0] data;


  9. always @(posedge CLK)

  10. if (CE == 1'b1) data <= {data[DATAWIDTH-2:0], SI};


  11. assign DO = data[SEL];


  12. endmodule

5.乘法器

综合工具从源代码中的乘法运算符来推测是否使用乘法器。乘法运算结果的位宽为两个操作数位宽之和。比如16Bits的信号乘以8Bits的信号,结果为24Bits。乘法器可以用Slice单元或DSP块实现,选择依据有两点:(1).操作数的大小;(2).是否需要最佳性能。通过第25篇介绍过的USE_DSP属性可以强制设定乘法器的实现方式,设置为no用slice实现;设置为yes用DSP块实现。

当使用DSP块实现乘法器时,Vivado综合可以发挥DSP块流水线能力的最大优势,综合时会在乘法操作数和乘法器后插入两级寄存器。当乘法器无法用一个DSP块实现时,综合时会拆分乘法运算,采用几个DSP块DSP块加slice的方案实现。下面给出代码示例:

  1. // 16*24-bit乘法器,操作数一级延迟,输出三级延迟

  2. module mult_unsigned (

  3. input clk,

  4. input [15:0]A,

  5. input [23:0]B,

  6. output [39:0]RES

  7. );


  8. reg [15:0] rA;

  9. reg [23:0] rB;

  10. reg [39:0] M [3:0];


  11. integer i;

  12. always @(posedge clk)

  13. begin

  14. rA <= A;

  15. rB <= B;

  16. M[0] <= rA * rB;

  17. for (i = 0; i < 3; i = i+1)

  18. M[i+1] <= M[i];

  19. end


  20. assign RES = M[3];


  21. endmodule

除了乘法器,综合工具还可以通过乘法器、加法器/减法器、寄存器的使用,推断出乘加结构(Multiply-Add)、乘减结构(Multiply-Sub)、乘加减结构(Multiply-Add/Sub)和乘累加结构(Multiply-Accumulate)。

5.复数乘法器

下面给出一个复数乘法器的代码示例,该设计会使用三个DSP48单元:

  1. // 复数乘法器(pr+i.pi) = (ar+i.ai)*(br+i.bi)

  2. module cmult # (parameter AWIDTH = 16, BWIDTH = 18)

  3. (

  4. input clk,

  5. input signed [AWIDTH-1:0] ar, ai,

  6. input signed [BWIDTH-1:0] br, bi,

  7. output signed [AWIDTH+BWIDTH:0] pr, pi

  8. );


  9. reg signed [AWIDTH-1:0] ai_d, ai_dd, ai_ddd, ai_dddd ;

  10. reg signed [AWIDTH-1:0] ar_d, ar_dd, ar_ddd, ar_dddd ;

  11. reg signed [BWIDTH-1:0] bi_d, bi_dd, bi_ddd, br_d, br_dd, br_ddd ;

  12. reg signed [AWIDTH:0] addcommon ;

  13. reg signed [BWIDTH:0] addr, addi ;

  14. reg signed [AWIDTH+BWIDTH:0] mult0, multr, multi, pr_int, pi_int ;

  15. reg signed [AWIDTH+BWIDTH:0] common, commonr1, commonr2 ;


  16. always @(posedge clk)

  17. begin

  18. ar_d <= ar;

  19. ar_dd <= ar_d;

  20. ai_d <= ai;

  21. ai_dd <= ai_d;

  22. br_d <= br;

  23. br_dd <= br_d;

  24. br_ddd <= br_dd;

  25. bi_d <= bi;

  26. bi_dd <= bi_d;

  27. bi_ddd <= bi_dd;

  28. end


  29. final products

  30. //

  31. always @(posedge clk)

  32. begin

  33. addcommon <= ar_d - ai_d;

  34. mult0 <= addcommon * bi_dd;

  35. common <= mult0;

  36. end

  37. // Real product

  38. //

  39. always @(posedge clk)

  40. begin

  41. ar_ddd <= ar_dd;

  42. ar_dddd <= ar_ddd;

  43. addr <= br_ddd - bi_ddd;

  44. multr <= addr * ar_dddd;

  45. commonr1 <= common;

  46. pr_int <= multr + commonr1;

  47. end

  48. // Imaginary product

  49. //

  50. always @(posedge clk)

  51. begin

  52. ai_ddd <= ai_dd;

  53. ai_dddd <= ai_ddd;

  54. addi <= br_ddd + bi_ddd;

  55. multi <= addi * ai_dddd;

  56. commonr2 <= common;

  57. pi_int <= multi + commonr2;

  58. end


  59. assign pr = pr_int;

  60. assign pi = pi_int;


  61. endmodule

6.DSP块中的预加器

当使用DSP块时,设计代码最好使用带符号数(signed)运算,这样需要一个额外的bit位宽来存储预加器(pre-adder)结果,这一位也可以封装在DSP块中。一个动态配置预加器(后面带一个乘法器和加法器)的Veirlog示例如下:

  1. // 控制信号动态选择预加或预减

  2. module dynpreaddmultadd # (parameter SIZEIN = 16)

  3. (

  4. input clk, ce, rst, subadd,

  5. input signed [SIZEIN-1:0] a, b, c, d,

  6. output signed [2*SIZEIN:0] dynpreaddmultadd_out

  7. );


  8. reg signed [SIZEIN-1:0] a_reg, b_reg, c_reg;

  9. reg signed [SIZEIN:0] add_reg;

  10. reg signed [2*SIZEIN:0] d_reg, m_reg, p_reg;


  11. always @(posedge clk)

  12. if (rst) begin

  13. a_reg <= 0; b_reg <= 0;

  14. c_reg <= 0; d_reg <= 0;

  15. add_reg <= 0;

  16. m_reg <= 0; p_reg <= 0;

  17. end


  18. else if (ce) begin

  19. a_reg <= a; b_reg <= b;

  20. c_reg <= c; d_reg <= d;

  21. if (subadd)

  22. add_reg <= a - b;

  23. else

  24. add_reg <= a + b;

  25. m_reg <= add_reg * c_reg;

  26. p_reg <= m_reg + d_reg;

  27. end


  28. // 输出累加结果

  29. assign dynpreaddmultadd_out = p_reg;


  30. endmodule

7.UltraScale DSP块中的平方电路

UltraScale DSP块的原语DSP48E2支持计算输入或预加器输出的平方。下面的示例代码计算了差值的平方根,该设计会使用一个DSP块实现,且有最佳的时序性能:

  1. // DSP48E2支持平方运算,预加器配置为减法器

  2. module squarediffmult # (parameter SIZEIN = 16)

  3. (

  4. input clk, ce, rst,

  5. input signed [SIZEIN-1:0] a, b,

  6. output signed [2*SIZEIN+1:0] square_out

  7. );


  8. reg signed [SIZEIN-1:0] a_reg, b_reg;

  9. reg signed [SIZEIN:0] diff_reg;

  10. reg signed [2*SIZEIN+1:0] m_reg, p_reg;


  11. always @(posedge clk)

  12. if (rst) begin

  13. a_reg <= 0;

  14. b_reg <= 0;

  15. diff_reg <= 0;

  16. m_reg <= 0;

  17. p_reg <= 0;

  18. end

  19. else if (ce) begin

  20. a_reg <= a;

  21. b_reg <= b;

  22. diff_reg <= a_reg - b_reg;

  23. m_reg <= diff_reg * diff_reg;

  24. p_reg <= m_reg;

  25. end


  26. assign square_out = p_reg;


  27. endmodule

8.黑盒子

FPGA设计可以包含EDIF网表,这些网表必须通过实例化与其它设计部分连接在一起。在HDL源代码中使用BLACK_BOX属性完成实例化,这部分实例化还可以使用一些特定的约束。使用BLACK_BOX属性后,该实例将被视作黑盒子。下面给出示例代码:

  1. //模块定义

  2. (* black_box *) module black_box1

  3. (

  4. input in1, in2,

  5. output dout

  6. );


  7. endmodule


  8. //模块实例化

  9. module black_box_1

  10. (

  11. input DI_1, DI_2,

  12. output DOUT

  13. );


  14. black_box1 U1 (

  15. .in1(DI_1),

  16. .in2(DI_2),

  17. .dout(DOUT)

  18. );


  19. endmodule

9.FSM状态机

默认情况下,Vivado综合可以从RTL设计中提取出有限状态机(FSM),使用-fsm_extraction off可以关闭该功能。通常需要设计者设置FSM的编码方式,便于综合时根据设置调整优化目标。

Vivado综合支持Moore和Mealy型状态机。一个状态机由状态寄存器、下一个状态功能、输出功能三部分组成,可用如下框图表示:

Mealy状态机需要从输出到输入的反馈路径。尽管状态寄存器也支持异步复位,但最好还是使用同步复位方式。设置一个复位或上电状态,综合工具即可识别出FSM。默认状态编码为auto,综合时会选择最佳的编码方式:

  • 独热码(One-Hot):最多支持32个状态,有最快的速度和较低的功耗,每个状态由一个独立的bit(对应一个触发器)表示,状态间转换时只需要改变两个bit的状态。

  • 格雷码(Gray):两个连续状态之间转换时只需要改变一个Bit的状态,可以最小化冒险和毛刺现象,有最低的功耗表现。

  • Johnson编码:适用于包含没有分支的长路径的状态机;

  • 顺序编码:使用连续的基数值表示状态,跳转到下一个状态的状态方程最简单。

下面给出一个FSM的Verilog示例:

  1. // 顺序编码的FSM

  2. module fsm_1(

  3. input clk, reset, flag,

  4. output reg sm_out

  5. );


  6. parameter s1 = 3'b000;

  7. parameter s2 = 3'b001;

  8. parameter s3 = 3'b010;

  9. parameter s4 = 3'b011;

  10. parameter s5 = 3'b111;


  11. reg [2:0] state; //状态寄存器


  12. always@(posedge clk)

  13. if(reset) begin

  14. state <= s1;

  15. sm_out <= 1'b1;

  16. end

  17. else begin

  18. case(state)

  19. s1: if(flag) begin

  20. state <= s2;

  21. sm_out <= 1'b1;

  22. end

  23. else begin

  24. state <= s3;

  25. sm_out <= 1'b0;

  26. end

  27. s2: begin state <= s4; sm_out <= 1'b0; end

  28. s3: begin state <= s4; sm_out <= 1'b0; end

  29. s4: begin state <= s5; sm_out <= 1'b1; end

  30. s5: begin state <= s1; sm_out <= 1'b1; end

  31. endcase

  32. end


  33. endmodule

10.ROM设计方法

Read-only memory(ROM)使用HDL模型实现与RAM非常相似。使用ROM_STYLE属性选择使用寄存器或块RAM资源来实现ROM。使用块RAM资源实现ROM的示例代码如下:

  1. //使用块RAM资源实现ROM

  2. module rams_sp_rom_1 (

  3. input clk, en,

  4. input [5:0] addr,

  5. output [19:0] dout

  6. );


  7. (*rom_style = "block" *) reg [19:0] data;


  8. always @(posedge clk)

  9. if (en)

  10. case(addr)

  11. 6'b000000: data <= 20'h0200A; 6'b100000: data <= 20'h02222;

  12. 6'b000001: data <= 20'h00300; 6'b100001: data <= 20'h04001;

  13. 6'b000010: data <= 20'h08101; 6'b100010: data <= 20'h00342;

  14. ......

  15. 6'b011110: data <= 20'h00301; 6'b111110: data <= 20'h08201;

  16. 6'b011111: data <= 20'h00102; 6'b111111: data <= 20'h0400D;

  17. endcase



  18. assign dout = data;


  19. endmodule






精彩推荐



至芯科技12年不忘初心、再度起航12月17日北京中心FPGA工程师就业班开课、线上线下多维教学、欢迎咨询!
EDA技术演变里看芯片创新之未来
Xilinx SRL16E 使用详解
扫码加微信邀请您加入FPGA学习交流群




欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!


点个在看你最好看




原文标题:Vivado使用技巧-HDL编写

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1665

    文章

    22573

    浏览量

    640800

原文标题:Vivado使用技巧-HDL编写

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于Vivado的AD9680 FPGA芯片测试

    在FPGA开发领域,与高速ADC芯片如AD9680协同工作是一项充满挑战但又极具乐趣的任务。今天咱们就聊聊基于Vivado平台,针对AD9680芯片,实现1G采样率且4通道(lane4)的FPGA测试程序,并且是用Verilog语言来完成哦。
    的头像 发表于 03-18 11:26 4259次阅读

    Verilog HDL语法学习笔记

    Verilog HDL 语 言 最 初 是 作为 Gateway Design Automation 公 司 ( Gateway DesignAutomation 公司后来被著名的 Cadence Design Systems 公司收购)模拟器产品开发的硬件建模语言。
    的头像 发表于 03-04 15:04 5952次阅读
    Verilog <b class='flag-5'>HDL</b>语法学习笔记

    Vivado中IP核被锁定的解决办法

    当使用不同版本的Vivado打开工程时,IP核被锁定的情况较为常见。不同版本的Vivado对IP核的支持程度和处理方式有所不同。
    的头像 发表于 02-25 14:00 670次阅读
    <b class='flag-5'>Vivado</b>中IP核被锁定的解决办法

    Vivado时序约束中invert参数的作用和应用场景

    Vivado的时序约束中,-invert是用于控制信号极性的特殊参数,应用于时钟约束(Clock Constraints)和延迟约束(Delay Constraints)中,用于指定信号的有效边沿或逻辑极性。
    的头像 发表于 02-09 13:49 519次阅读
    <b class='flag-5'>Vivado</b>时序约束中invert参数的作用和应用场景

    使用Vivado ILA进行复杂时序分析的完整流程

    HDL 代码中标记待观测信号,添加 (* mark_debug = "true" *) 属性(Verilog)或 keep 属性(VHDL)
    的头像 发表于 02-04 11:28 638次阅读

    通过vivado HLS设计一个FIR低通滤波器

    Vivado HLS是一款强大的高层次综合工具,可将C/C++代码转换为硬件描述语言(HDL),显著提升FPGA开发效率。
    的头像 发表于 01-20 16:19 622次阅读
    通过<b class='flag-5'>vivado</b> HLS设计一个FIR低通滤波器

    vivado中常用时序约束指令介绍

    vivado中,我们常用的时序约束指令主要包括如下几个方面。
    的头像 发表于 01-20 16:15 773次阅读

    AMD Vivado Design Suite 2025.2版本现已发布

    AMD Vivado Design Suite 2025.2 版本现已发布,新增对 AMD Versal 自适应 SoC 的设计支持,包含新器件支持、QoR 功能及易用性增强。
    的头像 发表于 12-09 15:11 1512次阅读

    vcs和vivado联合仿真

    我们在做参赛课题的过程中发现,上FPGA开发板跑系统时,有时需要添加vivado的ip核。但是vivado仿真比较慢,vcs也不能直接对添加了vivado ip核的soc系统进行仿真。在这种情况下
    发表于 10-24 07:28

    FPGA开发板vivado综合、下载程序问题汇总

    在做vivado综合时和FPGA下载程序时,我们碰到以下问题,并找出了对应的解决方案。 1.could not open include file”e203_defines.v”问题 在做
    发表于 10-24 07:12

    使用Simulink自动生成浮点运算HDL代码(Part 1)

    引言 想要实现浮点运算功能,如果自己写Verilog代码,需要花费较多的时间和精力。好在Simulink HDL Coder工具箱提供了自动代码生成技术。下图展示了HDL Coder如何生成浮点运算
    发表于 10-22 06:48

    AMD Vivado ChipScope助力硬件调试

    许多硬件问题只有在整个集成系统实时运行的过程中才会显现出来。AMD Vivado ChipScope 提供了一套完整的调试流程,可在系统运行期间最大限度提升对可编程逻辑的观测能力,助力设计调试。
    的头像 发表于 09-05 17:08 1365次阅读

    vivado仿真时GSR信号的影响

    利用vivado进行设计xilinx FPGA时,写完设计代码和仿真代码后,点击run simulation(启动modelsim进行仿真)。
    的头像 发表于 08-30 14:22 1697次阅读
    <b class='flag-5'>vivado</b>仿真时GSR信号的影响

    Vivado无法选中开发板的常见原因及解决方法

    在使用 AMD Vivado Design Suite 对开发板(Evaluation Board)进行 FPGA 开发时,我们通常希望在创建工程时直接选择开发板,这样 Vivado 能够自动配置
    的头像 发表于 07-15 10:19 2042次阅读
    <b class='flag-5'>Vivado</b>无法选中开发板的常见原因及解决方法

    AMD Vivado Design Suite 2025.1现已推出

    AMD Vivado Design Suite 2025.1 现已推出,支持 AMD Spartan UltraScale+ 和新一代 Versal 器件。这一最新版本还新增了多项功能,可显著提升 Versal SSIT 器件的 FMAX 值,并对所有系列产品在 IP 集成和功能验证方面的易用性进行了改进。
    的头像 发表于 06-16 15:16 1765次阅读