fpga

硬件工程师离不开的那些电路设计工具,你会有几个呢

邮差的信 提交于 2019-12-05 17:04:02
  EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的 最新成果,进行电子产品的自动设计。利用EDA工具,可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机上自动处理完成。      EDA常用软件   EDA工具层出不穷,目前进入我国并具有广泛影响的EDA软件有:protel、MentorPADS、OrCAD、Mentor WG、Mentor EN、allegro、EWB、PSPICE、 Synopsys等等。按主要功能或主要应用场合,大致可分为电路设 计与仿真工具、PCB设计软件、IC设计软件、PLD设计工具及其它EDA软件。   电子电路设计与仿真工具   电子电路设计与仿真工具包括:   SPICE/PSPICE、EWB、Matlab、SystemView、Multisim、MMICAD等。下面简单介绍前三个软件。   1)SPICE:由美国加州大学推出的电路分析仿真软件,现在用得较多的是PSPICE6.2,在同类产品中是功能最为强大的模拟和数字电路混合仿真 EDA软件,它可以进行各种各样的电路仿真、激励建立、温度与噪声分析、模拟控制、波形输出、数据输出、并在同一窗口内同时显示模拟与数字的仿真结果。无 论对哪种器件哪些电路进行仿真,都可以得到精确的仿真结果

Do bitwise operations distribute over addition?

时间秒杀一切 提交于 2019-12-05 11:34:49
I'm looking at an algorithm I'm trying to optimize, and it's basically a lot of bit twiddling, followed by some additions in a tight feedback. If I could use carry-save addition for the adders, it would really help me speed things up, but I'm not sure if I can distribute the operations over the addition. Specifically if I represent: a = sa+ca (state + carry) b = sb+cb can I represent (a >>> r) in terms of s and c? How about a | b and a & b? Think about it... sa = 1 ca = 1 sb = 1 cb = 1 a = sa + ca = 2 b = sb + cb = 2 (a | b) = 2 (a & b) = 2 (sa | sb) + (ca | cb) = (1 | 1) + (1 | 1) = 1 + 1 = 2

Adding Library to VHDL Project

∥☆過路亽.° 提交于 2019-12-05 07:42:45
问题 I am trying to use fixed point numbers in my VHDL project, but I keep having trouble implementing the library (found here http://www.eda-stds.org/fphdl/fixed_pkg_c.vhdl). The error I receive when trying to simulate is this <ufixed> is not declared My question is how exactly should a library be implemented so it can be used? As of now I have added it to the project in the IEEE_PROPOSED library, but it is not working. All source code can be found here https://github.com/srohrer32/beamformer

fpga IO双向口问题

半世苍凉 提交于 2019-12-05 06:21:22
IOBUF双向口原语: 帖子中的如何使用代码如下: module xxxx( inout data_io ); wire data_i ; // to your own logic wire data_o; // from your own logic wire data_t; // from your own logic to control the direction of the IOBUF IOBUF IOBUF_inst ( .O (data_i), .IO (data_io), .I (data_o), .T (data_t) ); endmodule 来源: https://my.oschina.net/u/2963604/blog/3132470

VHDL short form to trigger actions on raising edges

非 Y 不嫁゛ 提交于 2019-12-05 05:05:42
问题 I wonder if there is a shorter way to trigger on signal edges that are not the clock. Consider the following example: signal clock : std_logic; signal ready : std_logic; -- comes from some slow component signal last_ready : std_logic; signal some_rare_condition : std_logic; ---------------------------------- process (clock) is begin if rising_edge (clock) then if (some_rare_condition = '1') then if (ready = '1') and (last_ready = '0') then -- do something here, writing data to UART for

[FPGA]Verilog实现8421BCD码计数器

强颜欢笑 提交于 2019-12-05 04:57:00
目录 概述 电路分析 代码实现 参考文献 概述 本文以 异步 时序计数器为例,用Verilog实现以 \(JK\) 触发器组成的8421BCD码十进制异步计数器,并用ModelSim软件进行仿真验证. 电路分析 实现8421BCD码十进制计数器可分为同步时序和异步时序,分析方法类似,本文采用较为简单的异步时序进行讲解,关于同步时序实现方法可以参考相关资料. 下图为异步时序实现的该计数器的逻辑电路图. 可以根据逻辑电路图写出激励方程 \[ \begin{cases}J_0=K_0=1\\J_1=\overline{Q_3^n},K_1=1\\J_2=K_2=1\\J_3=Q_1^nQ_2^n,K_3=1\end{cases}\tag{*} \] 将 \((*)\) 式带入 \(JK\) 触发器的特征方程可得该电路的状态方程 \[ \begin{cases}Q_0^{n+1}=\overline{Q_0^n}\cdot CP\\Q_1^{n+1}=\overline{Q_3^n}\overline{Q_1^n}Q_n^n\\Q_2^{n+1}=\overline{Q_2^n}Q_1^n\\Q_3^{n+1}=\overline{Q_3^n}Q_2^nQ_1^nQ_0^n\end{cases}\tag{**} \] 设定 \(Q_3^nQ_2^nQ_1^nQ_0^n=0000\)

Ideas for a flexible/generic decoder in VHDL

眉间皱痕 提交于 2019-12-05 04:46:29
I want to create an address Decoder that is flexible enough for me to use when changing the number of bits of the selector and of the decoded output signals. So, instead of having a static (fixed input/output size) Decoder that looks something like this : entity Address_Decoder is Generic ( C_INPUT_SIZE: integer := 2 ); Port ( input : in STD_LOGIC_VECTOR (C_INPUT_SIZE-1 downto 0); output : out STD_LOGIC_VECTOR ((2**C_INPUT_SIZE)-1 downto 0); clk : in STD_LOGIC; rst : in STD_LOGIC ); end Address_Decoder; architecture Behavioral of Address_Decoder is begin process(clk) begin if rising_edge(clk)

Manipulating 80 bits datatype in C

烂漫一生 提交于 2019-12-05 04:12:44
I'm implementing some cryptographic algorithm in C which involves an 80 bits key. A particular operation involves a rotate shifting the key x number of bits. I've tried the long double type which if I'm not wrong is 80bits, but that doesn't work with the bitshift operator. The only alternative I can come up with is to use a 10 element char array with some complicated looping and if-else. My question is whether there's some simple and efficient way of carrying this out. Thanks. There is something a bit messed up here. If I understand you correctly, you are using a "soft" cpu on the FPGA.

Solving Metastability Using Double-Register Approach

吃可爱长大的小学妹 提交于 2019-12-04 21:18:37
For solving metastability caused by different clock domains in Verilog, double-register method is used. But as far as I know, the final output of metastability is undetermined. Output is independent of input. So, my question is how to guarantee the correctness of output using double-register method? Thanks. You cannot be completely sure that you avoided metastability. As you mentioned, the output of a metastable flip-flop is unpredictable so you can potentially propagate a wrong value when you have metastability even with the 'two-register' approach. This method however never intended to solve

Receive an high rate of UDP packets with python

牧云@^-^@ 提交于 2019-12-04 20:42:54
I'm working with python in order to receive a stream of UDP packets from an FPGA, trying to lose as few packets as possible. The packet rate goes from around 5kHz up to some MHz and we want to take data in a specific time window (acq_time in the code). We have this code now: BUFSIZE=4096 dataSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) dataSock.settimeout(0.1) dataSock.bind((self.HOST_IP, self.HOST_PORT)) time0=time.time() data_list = [] while time.time()-time0<acq_time: fast_acquisition(data_list) def fast_acquisition(data_list_tmp): data, addr = dataSock.recvfrom(self.BUFSIZE)