Skip to content

Instantly share code, notes, and snippets.

@cfelton
Created April 5, 2015 03:35
Show Gist options
  • Save cfelton/36a2ee340ecea58cdff0 to your computer and use it in GitHub Desktop.
Save cfelton/36a2ee340ecea58cdff0 to your computer and use it in GitHub Desktop.
example of large bit-vector concats
from myhdl import *
def largeconcat(clock, reset, addr, oldest_addr, newest_addr):
addr_array = Signal(intbv(0)[459:0])
wrapaddr = modbv(0)[23:0]
@always_seq(clock.posedge, reset=reset)
def rtl():
wrapaddr[:] = addr-1
addr_array.next = concat(addr_array[436:0], wrapaddr)
# this example has a mismatch in size, the left-hand
# side is 23bits and the right 22bits
oldest_addr.next = addr_array[459:437]
newest_addr.next = addr_array[22:0]
return rtl
clock = Signal(bool(0))
reset = ResetSignal(0, active=0, async=True)
addr = Signal(intbv(0)[23:])
oldest_addr = Signal(intbv(0)[23:])
newest_addr = Signal(intbv(0)[23:])
toVerilog(largeconcat, clock, reset, addr, oldest_addr, newest_addr)
toVHDL(largeconcat, clock, reset, addr, oldest_addr, newest_addr)
wrapaddr = (addr - 1);
addr_array <= {addr_array[436-1:0], wrapaddr};
oldest_addr <= addr_array[459-1:437];
newest_addr <= addr_array[22-1:0];
wrapaddr := (addr - 1);
addr_array <= unsigned'(addr_array(436-1 downto 0) & wrapaddr);
oldest_addr <= resize(addr_array(459-1 downto 437), 23);
newest_addr <= resize(addr_array(22-1 downto 0), 23);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment