fpga:vhdl
Table of Contents
VHDL
opencores – Mostly verilog? Might find something useful
Things is should write down
- Math-functions for determining bit width (IEEE.math_real.all)
- Generic notation
- natural and conversion to integer and real
- Defining functions
- Entity instantiation Stack overflow
- State machines using type
- Some simulation specific stuff like after 3ps, assert and until rising_edge(clk)
- High impedance value of std_logic ('Z'), only for ports
- Naming conventions once I have settled for one
- Generate statement
- Immediate values syntax
Conversions
library ieee; use ieee.std_logic_1164.all; -- std_logic_vector use ieee.numeric_std.all; -- signed and unsigned -- numbers, math operations allowed signal my_int : integer; -- 32 bit 2-complement signal my_int_ranged : integer -1 to 23; -- Limited range. Simulator might enforce, synthesiser might not signal my_uint : unsigned (7 downto 0); signal my_sint : signed (7 downto 0) := x"0a"; -- Default values might not synthesize, depends on target -- loose bits, math operations not allowed signal my_bit : std_logid; signal my_bits : std_logic_vector (7 downto 0); -- Integer assignements my_int <= 1337; -- Decimal my_int <= 16#beef#; -- Hex (base 16) my_int <= 2#101010; -- Binary (base 2) -- std_logic assignement my_bit <= '0'; -- Assignments to std_logic_vector (also works on signed and unsigned) -- All assignments must match in width my_bits <= (others => '0'); -- Set all bits to '0' my_bits(3 downto 0) <= (others => '1'); -- Set lowest 4 bits to '1' my_bits <= "10101011"; -- Set with bit array my_bits <= x"ab"; -- Set with hex my_bits <= '1' & '0' & "10" & x"b"; -- Concatenate different notations -- conversions between integers my_uint <= to_unsigned(my_int, 8); -- Must specify bit length my_sint <= to_signed(my_int, 8); my_int <= to_integer(my_uint); my_int <= to_integer(my_sint); -- casts between binary representations, lenght must match my_uint <= unsigned(my_sint); my_uint <= unsigned(my_bits); my_sint <= signed(my_uint); my_sint <= signed(my_bits); my_bits <= std_logic_vector(my_uint); my_bits <= std_logic_vector(my_sint); -- From ASCII code value my_ascii_code <= std_logic_vector(to_unsigned(character'pos('A'), my_ascii_code'length)); -- From number immediate values to std_logic_vector my_immediate_hex <= std_logic_vector(to_unsigned(16#150#, my_immediate_hex'length)); my_immediate_dec <= std_logic_vector(to_unsigned(10#150#, my_immediate_dec'length));
-- Char to unsigned tx_char <= to_unsigned(character'pos('a'), 8);
Textio
Can be used in simulation.
use std.textion.all; -- Further down... process is variable l : line; begin write (l, String'("Hello world!")); writeline (output, l); wait; end process;
Other things
report "this is a message"; -- severity note -- or: report "this is a serious message" severity warning; -- Possible values: note, warning, error, failure
fpga/vhdl.txt · Last modified: 2025/06/13 12:33 by utedass
