dsp 资源的灵活性远远超过用户认知,加减乘除、累加、计数器、比较器,移位寄存器、复用器、模式匹配等等全部可以使用dsp实现。dsp如何使用复位呢?每一个dsp的slice有超过250多个寄存器,但是没有一个使用了异步复位。用户使用同步复位可以令综合工具更加容易的推断出使用dsp资源。
这个事情的重要性,需要进一步强调一下。同步复位可以令工具更容易的使用专用的硬件资源。特别对dsp资源来说,用户特别喜欢dsp的输出的寄存器,这样可以增加pipeline,提高系统的性能。只要使用了异步的复位,那么综合工具将无法有效的推断出使用dsp资源。在实际的设计中,我们经常可以看到只要是使用了同步复位,dsp资源将被使用的更有效率。那么只要用户想建立一个算术的系统并且想有效使用dsp资源,那么一定要确保自己使用的同步复位。
block rams可以通过使用输出寄存器,可以获得最小的输出的时间,提高性能。同样输出的寄存器也仅仅有同步服务的接口。没有被使用blockram的资源,那么可以用来作很多功能,例如:rom、大的lut、复杂的逻辑、大状态机、深度移位寄存器。使用blockram作为其他的功能,能够解放出大量的寄存器。同样,同步复位可以令工具更容易的推断出block ram硬件资源。只要使用了异步的复位,那么综合工具将无法有效的推断出使用block ram资源。
另外一个重要的事情,也要说明一下,就是移位寄存器。用户一定要记住要想直接使用lut作为以为寄存器一定不能有复位端口。只要是在相关的hdl代码中使用了复位的信号,那么这个设计就不可能使用lut作为srl寄存器了。综合工具或者把用户的设计放在相关的clb的寄存器里面了。这个会非常明显的增加使用的寄存器的数量。工具或者建立一个辅助的电路来模拟复位的功能。但是同样的,复位电路也需要大量的消耗资源。设计肯定也会更慢,这个肯定和设计的目的背道而驰。
很多用户可能会有一个疑问,那么这个移位寄存器到底应该怎么在代码中体现呢?给一个例子,当做设计的时候能够仿照这个来实现自己的功能。
vhdl版本的:
library ieee;
useieee.std_logic_1164.all;
entity shifter is
generic (
c_dwidth : integer := 8;
c_num_cycles : integer := 32
);
port ( clk : in std_logic;
en : in std_logic;
din : in std_logic_vector(c_dwidth-1 downto 0);
dout : out std_logic_vector(c_dwidth-1 downto 0));
end shifter;
architecture behavioral ofshifter is
signal din_d1 :std_logic_vector(c_dwidth-1 downto 0); -- shift register input
type array_slv is array(c_dwidth-1 downto 0) of std_logic_vector(c_num_cycles-1 downto 0);
signal din_shreg :array_slv;
begin
process (clk)
begin
if clk'event and clk='1' then
if en = '1' then
for i in 0 to c_dwidth-1 loop
din_shreg(i) <=din_shreg(i)(c_num_cycles-2 downto 0) & din(i);
end loop;
end if;
end if;
end process;
process (din_shreg)
begin
for i in 0 to c_dwidth-1 loop
dout(i) <=din_shreg(i)(c_num_cycles-1);
end loop;
end process;
end behavioral;
verilog版本的:
`timescale 1 ps / 1 ps
module shifter
#(
parameter c_dwidth = 8,
parameter c_num_cycles = 32
)
(
clk,
en,
din,
dout
);
input clk;
input en;
input [c_dwidth-1:0] din;
output [c_dwidth-1:0] dout;
reg [c_num_cycles-1:0]din_shreg [c_dwidth-1:0];
integer srl_index;
initial
for (srl_index = 0; srl_index
硅胶高温线的应用都包括着哪些领域
模块化机柜 vs.一体化机柜
从非洲到全球,看华为云连接CC如何助力出海企业更好发展
统信软件宣布书生电子公司两款产品已完成与UOS的适配工作 测试结果显示可平稳运行
电子制造服务提供商易德龙发布2022第一季度报告
FPGA从Xilinx的7系列学起(14)
如何创建标准的RT-Thread项目工程?详细过程分析概述
TynecastleTech团队为初学者提供的鱼菜共生系统
PFC电路旁路二极管作用及MOSFET常见失效模式有哪些
加密货币热潮的三大规则
安泰测试:DSA875频谱分析仪信噪比怎么测?
关于机壳地和数字地以及模拟地的关系
人工智能和机器学习正在改变语音助手的网络威胁格局
工控机对于工作的环境温度有什么要求
AI把用户逼上公有云 信息智能化趋势明显
数据备份与数据归档冷热状态的区别
百度公布青松计划细则:员工父母可不限年龄不限地域享受公司医保
曝谷歌已开始在其他OEM手机上对Stadia进行测试优化
所有C语言数组和指针的知识都在这里了!|周立功手把手教你学C语言编程
华为余承东:Mate50有“向上捅破天”技术