Skip to content

Raw HDL Insertion

Julian Kemmerer edited this page Jul 26, 2020 · 22 revisions

The goal of this feature is to approximate the functionality of (gcc's)[https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Extended-Asm] __asm__() function.

__asm()__ is used to directly describe cpu architecture specific assembler instructions (as opposed to being compiler from higher level C language). Similarly __vhdl__() can be used to insert arbitrary VHDL text into PipelineC functions/modules.

uint64_t main(uint64_t x, uint64_t y) 
{
__vhdl__("\
  -- Arch declarations go here
  begin
  -- The arch body, processes, assignments, etc go here
  return_output <= x + y; 
");
}

The above PipelineC produces examples the below VHDL file.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
library ieee_proposed;
use ieee_proposed.float_pkg.all;
use work.c_structs_pkg.all;
entity main_0CLK_d751 is
port(
 clk : in std_logic;
 x : in unsigned(63 downto 0);
 y : in unsigned(63 downto 0);
 return_output : out unsigned(63 downto 0));
end main_0CLK_d751;
architecture arch of main_0CLK_d751 is
  -- Arch declarations go here 
  begin 
  -- The arch body, processes, assignments, etc go here 
  return_output <= x + y; 
end arch;
Clone this wiki locally