我的设计可以按需生成视频信号,而无需使用RAM资源进行帧缓冲。
我有一个代表屏幕布局的层次结构,顶层块生成像素时钟和同步信号,并创建一个显示下一个像素坐标的信号。下面是具有相同界面的各种块:
type point is record
valid : std_logic;
x : unsigned(11 downto 0);
y : unsigned(11 downto 0);
end record;
type color is record
r : std_logic;
g : std_logic;
b : std_logic;
end record;
component source is
port(
pos : in point;
col : out color);
end component;
一般的想法是这些块中的每一个都直接生成信号,或者包含子块。
我想坚持像素点播模式,因为它允许我做
architecture syn of zoom2_block is
signal slave_pos : point;
begin
slave_pos.valid <= pos.valid;
slave_pos.x <= "0" & pos.x(10 downto 1);
slave_pos.y <= "0" & pos.y(10 downto 1);
slave : source port map(
pos => slave_pos,
col => col);
end architecture;
现在,几个块的最里面的像素生成器非常相似(例如字体像素查找),并且因为只有一个像素将被传递到外部,我想知道我是否可以以某种方式共享块,例如比如层次结构中的font
output
source : split_screen
source : zoom
source : text
font
source: text
font
text
块本身无法共享,因为它们包含赋予font
块的实际字符代码 - 但font
块两次完全相同 - 采取坐标和字符代码并返回适当的像素值,没有状态。由于字体数据很大,无法共享这些是一个问题。
到目前为止我的想法:
在'-'
期间让每个块输出pos.valid = '0'
,希望编译器会注意到层次结构中的一个块始终是这种情况。我不确定编译器会得到这个。
创建一个特殊组件,用于仲裁对字体块的访问,作为array(1 to N) of point
接口的通用,选择带pos.valid = 1
的第一个输入。这仍然需要我构建一个不再是树的层次结构。
可以这样做吗?