BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / circuit / #14587同步于 2010/7/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖

个人编VHDL总结的一些小技巧,分享一下

bupteinstein
2010/7/28镜像同步77 回复
最近在编VHDL程序,发现有很多东西和想象的不一样,比如一个进程里不能判断两个时钟沿。这些导致很多原来想当然的逻辑编不成功,于是自己摸索,用测试程序测试,总结了一些VHDL语言的小技巧和经验总结,在这里分享一下。错误之处,还请各位指正。 ---------------------------------------------------------------------------------------------------- 2010.07.27_20'02 问题描述:在VHDL中,如何使用两个时钟更改同一个数据? 解决方法:使用“异或”(xor)逻辑。示例如下: process (clk1) begin if rising_edge(clk1) then SIG_DOUT1 <= SIG_DOUT2 xor SIG_DIN1; end if; end process; process (clk2) begin if rising_edge(clk2) then SIG_DOUT2 <= SIG_DOUT1 xor SIG_DIN2; end if; end process; SIG_DOUT <= SIG_DOUT1 xor SIG_DOUT2; DOUT <= SIG_DOUT; ---------------------------------------------------------------------------------------------------- 2010.07.28_09'17 问题描述:在VHDL中,如何使用一个时钟的两个沿(上升沿、下降沿)对同一信号进行修改? 解决方法:使用“异或”(xor)逻辑。示例如下: process (CLK) begin if rising_edge(CLK) then SIG_RISE_OUT <= SIG_FALL_OUT xor D_IN0; end if; end process; process (CLK) begin if falling_edge(CLK) then SIG_FALL_OUT <= SIG_RISE_OUT xor D_IN1; end if; end process; D_OUT <= SIG_RISE_OUT xor SIG_FALL_OUT; ---------------------------------------------------------------------------------------------------- 2010.07.27_20'13 问题描述:VHDL中integer是如何实现的? 解决方法:测试发现integer使用最少的无符号二进制数位实现; ---------------------------------------------------------------------------------------------------- 2010.07.27_20'16 问题描述:如何模拟一个与主时钟同频的计数器? 解决方法: process (CLK) --可以用这种方法模拟一个与主时钟同频的计数器 begin if (falling_edge(CLK)) then SIGNAL_CLK_CNT(3 downto 1) <= SIGNAL_CLK_CNT(3 downto 1) + 1; end if; end process; SIGNAL_CLK_CNT(0) <= CLK; ---------------------------------------------------------------------------------------------------- 2010.07.27_20'18 问题描述:为什么for-generate语句不能通过编译? 解决方法:for-generate语句要加标号才通过。 ---------------------------------------------------------------------------------------------------- 2010.07.27_20'19 问题描述:process中,信号间赋值是“值传递”还是“地址传递”? 解决方法:process中的信号赋值是:将值赋给信号,不是将信号赋给信号。 也就是说,是“值传递”。我猜想其硬件是使用触发器实现的。 ---------------------------------------------------------------------------------------------------- 2010.07.27_20'21 问题描述:如何实现信号延时(上升沿同步,但下降沿延迟几个时钟出现)? 解决方法: PROC_ADJ_VSYNCS: process (CLK_IN,CLK)--可实现信号线延时 variable VAR_VSYNC_CNT: std_logic_vector(3 downto 0):= "0000"; constant CONST_VSYNC_CNT_MAX: std_logic_vector(3 downto 0):= "1100"; begin if CLK_IN='1' then CLK_OUT <= '1'; VAR_VSYNC_CNT := "0000"; elsif rising_edge(CLK) then if (VAR_VSYNC_CNT<CONST_VSYNC_CNT_MAX) then CLK_OUT <= '1'; VAR_VSYNC_CNT := VAR_VSYNC_CNT + 1; else CLK_OUT <= '0'; end if; end if; end process PROC_ADJ_VSYNCS; ---------------------------------------------------------------------------------------------------- 2010.07.28_12'08 问题描述:VHDL语言如何实现数据选择器? 解决方法: SIG_DOUT <= SIG_DINS(SIG_IDX); --多路输入,单路输出 SIG_DOUTS(SIG_IDX) <= SIG_DIN; --单路输入,多路输出 ----------------------------------------------------------------------------------------------------
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
lanphon机器人#1 · 2010/7/28
赞哇,虽然喜欢verilog多点儿
police机器人#2 · 2010/7/28
表示我过几天也要开始纠结一下HDL了。。。 不知道选啥呢。。。。 【 在 lanphon (上善若水) 的大作中提到: 】 : 赞哇,虽然喜欢verilog多点儿
a640机器人#3 · 2010/7/28
顶啊
jxwgh66机器人#4 · 2010/7/28
ding
hardy616机器人#5 · 2010/7/28
赞啊~电路版的也有上十大的了~
magicXJ机器人#6 · 2010/7/28
小欢欢 【 在 a640 的大作中提到: 】 : 顶啊 : --
happyoyster机器人#7 · 2010/7/28
竟然还有这个版块存在
ciphersy机器人#8 · 2010/7/28
我靠,技术贴上十大了,奇迹啊!!
UZ机器人#9 · 2010/7/28
果断顶啊顶~