请教一个VHDL问题
- 资格考试
- 2022-10-03 12:58:44
你好!我还想请教一个关于VHDL语言编程问题,不过没有分数可以给你了。
这个程序里面比较难的就是当U1=1时闪炼变化,这里我用一个状态机来描述,ST0表示U1为0时的状态,ST1表示U1为1的状态,当U1为0时,这时就相当于一个计数器,每隔2S加1,当U1=1时,我就让他每隔2S闪炼一次,即每隔2S对输出取一次反(具体要怎么闪炼你可以自行决定),当闪炼5次时即10S后,他又继续输出下个状态。以下是我的程序,希望是你想要的!!!! LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY KKK IS PORT(U1,CLK,RESET:IN STD_LOGIvhdl中的一个问题,菜鸟问各位
您好,这样的: 问题在于signal 和variable 的区别:signal赋值一般认为在进程结束后(反正有个延时)才把值赋给信号,variable是立刻把值赋给变量.... 你把j、t定义为信号,等于说你赋值是要等到进程完后才赋值,而LOOP语句必须是循环变量范围不满足条件后才结束,等于进程只执行一次,LOOP语句要执行30次...而信号要在进程完后才赋值...你说结果如何哎?可以这样认为for语句执行时,整个语句的执行时间小于信号赋值的时间,当信号还没有赋值是for又开始执行了... j、t一直得不到赋值 , 变量在仿真时是不可见的。VHDL代码问题
这个代码的用途从entity的port部分就基本上可以看出端倪来。 首先是有三个端口,一个是外部时钟得到100MHz的信号,这个是从板载晶震上面得到的。 之后第二个端口clkOut100kHz,是从100MHz上面截取的100kHz的输出。 之后第三个端口是reset,从已经连接的端口上得到高电平出发重置。 简单说一下VHDL clkSys100MHz : in STD_LOGIC; 意思是,针脚clkSys100MHz,输入,标准逻辑库,二值,只有‘0’和‘1’两种状态。 那么 clkOut100KHz : out STD_LOGIC; 意思是,针脚clkOut100KHz,输出,标准逻辑库VHDL编程出了什么问题?
以上是属于多时钟问题!在设计时往往会遇到这种情况,需要对外部某个输入信号进行判断,当其出现上跳或下跳沿时,执行相应的操作,而该信号不像正常时钟那样具有固定占空比和周期,而是很随机,需要程序设计判断其上跳沿出现与否。就会写出如上程序! 解决的办法可以如下,将clk1和key2 增加一级状态 lcx 寄存,通过对 clk1或key2 和lcx状态判断上跳与否,改正程序如下: signal lcx:std_logic; signal a,count3:integer; begin process(en,clk) begin if en='1' then if clk'event and clk='1vhdl的问题
你这样写是不对的,一个进程里出现了两个时钟沿判断。 可以这样写 process(clk,fn,rst) variable delay_1 , delay_2;std_logic; begin if rst = '0' then acc <= (others=>'0'); nc <= (others=>'0'); elsif clk'event and clk = '1' then if delay_2 = '0' and delay_1 = '1' then ( 中间的我就不写了哈,打字也蛮费时间的:) ) end if; delay_2 := delay_1; delay_1 := fn;展开全文阅读