【发布时间】:2016-10-03 22:56:19
【问题描述】:
我有一个 8 位输入和串行输出的模块,我想将输入数据序列化并与时钟同步。
我想在下降沿设置我的数据然后在时钟上升时等待,当时钟再次下降时我设置另一个数据。我不想将直接参考时钟连接到输出,因为当我不使用此模块时,我希望时钟输出处于 1 状态。
我试过这段代码:
process(Clock, ModuleReset)
begin
if ModuleReset = '0' then
OutData <= '0';
OutCK <= '0';
counter <= 7;
elsif falling_edge(Clock) then
OutCK <= '0';
OutData <= Data(counter);
elsif rising_edge(Clock) then
OutCK <= '1';
end if;
end process;
合成器给了我这个错误:
“不支持SCK异步加载非常量数据”
当我像这样将代码分成两个块时:
process(Clock, ModuleReset)
begin
if ModuleReset = '0' then
OutData <= '0';
OutCK <= '0';
counter <= 7;
elsif falling_edge(Clock) then
OutCK <= '0';
OutData <= Data(counter);
end process;
process(Clock)
if rising_edge(Clock) then
OutCK <= '1';
end if;
end process;
我有这两个错误:
“用于网络 SCK 的多个非三态驱动程序”
“未解决的网络 SCK 三态驱动程序”
我试过的另一个代码是:
process(Clock, ModuleReset)
if ModuleEN = '1' then
OutCK <= Clock;
end if;
begin
if ModuleReset = '0' then
OutData <= '0';
OutCK <= '0';
counter <= 7;
elsif falling_edge(Clock) then
OutCK <= '0';
OutData <= Data(counter);
end if;
end process;
但是输出时钟在不同的频率下看起来很奇怪。
【问题讨论】:
-
我已经解决了,最后的代码成功了。