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

求助:问一个关于VHDL编程的问题

toothache
2010/11/29镜像同步22 回复
现在需要编一个模块来实现在每个时钟变化沿计算walsh这个四位数组里面1的个数(程序如下),不过仿真后temp_1在每个时钟沿只加一(仿真时walsh赋值为1010),从0变到7后再循环。求哪位大牛指点一下,纠结了好久都不知道是什么问题。 程序部分: process(clk_en) begin if clk_en'event then temp_1 <= "000"; if walsh(3) = '1' then temp_1 <= temp_1 + "001"; end if; if walsh(2) = '1' then temp_1 <= temp_1 + "001"; end if; if walsh(1) = '1' then temp_1 <= temp_1 + "001"; end if; if walsh(0) = '1' then temp_1 <= temp_1 + "001"; end if; result <= temp_1; end if; end process;
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
teamo机器人#1 · 2010/11/29
下次贴图最好改jpg或png的。。。。 一个process里头是并行的,如果有多个1,计数器只能加1. 就不该这么写。 搞个组合逻辑,最不济来个case啥的。 【 在 toothache (water_tt | 瓦特人天天) 的大作中提到: 】 : 现在需要编一个模块来实现在每个时钟变化沿计算walsh这个四位数组里面1的个数(程序如下),不过仿真后temp_1在每个时钟沿只加一(仿真时walsh赋值为1010),从0变到7后再循环。求哪位大牛指点一下,纠结了好久都不知道是什么问题。 : 程序部分: : process(clk_en) : ...................
lanphon机器人#2 · 2010/11/29
【 在 teamo 的大作中提到: 】 : 下次贴图最好改jpg或png的。。。。 : 一个process里头是并行的,如果有多个1,计数器只能加1. : 就不该这么写。 : ................... 在verilog中,case和?:语句使用的频率特别高。 VHDL的确没仔细研究过,自从回verilog之后。。。。
toothache机器人#3 · 2010/11/29
【 在 teamo 的大作中提到: 】 : 下次贴图最好改jpg或png的。。。。 : 一个process里头是并行的,如果有多个1,计数器只能加1. : 就不该这么写。 : ................... 想到过用case语句,不过这只是初步仿真,后面要实现统计64位的walsh里面1的个数,觉得太麻烦所以不想用case,想有没有简单点的~~恩,多谢了,接触VHDL还不是太久,问的问题还比较小白,呵呵~~
lanphon机器人#4 · 2010/11/29
【 在 toothache 的大作中提到: 】 : 想到过用case语句,不过这只是初步仿真,后面要实现统计64位的walsh里面1的个数,觉得太麻烦所以不想用case,想有没有简单点的~~恩,多谢了,接触VHDL还不是太久,问的问题还比较小白,呵呵~~ verilog中有个for语句,可综合 VHDL不清楚
toothache机器人#5 · 2010/11/29
【 在 lanphon 的大作中提到: 】 : : 想到过用case语句,不过这只是初步仿真,后面要实现统计64位的walsh里面1的个数,觉得太麻烦所以不想用case,想有没有简单点的~~恩,多谢了,接触VHDL还不是太久,问的问题还比较小白,呵呵~~ : verilog中有个for语句,可综合 : VHDL不清楚 : ................... 貌似看书上说VHDL里面的循环都综合不了~~哎,悲剧啊~~
teamo机器人#6 · 2010/11/29
不知道阻塞赋值是不是能解决这个问题? 我一直没太弄明白阻塞赋值,但感觉就是这种场合可以用的。不知道会综合出什么东西来。 【 在 toothache (water_tt | 瓦特人天天) 的大作中提到: 】 : 现在需要编一个模块来实现在每个时钟变化沿计算walsh这个四位数组里面1的个数(程序如下),不过仿真后temp_1在每个时钟沿只加一(仿真时walsh赋值为1010),从0变到7后再循环。求哪位大牛指点一下,纠结了好久都不知道是什么问题。 : 程序部分: : process(clk_en) : ...................
police机器人#7 · 2010/11/30
最不济来个查找表。嗯。。。其实综合出来就是LUT。。 【 在 teamo (/ti 'amo/) 的大作中提到: 】 : 下次贴图最好改jpg或png的。。。。 : 一个process里头是并行的,如果有多个1,计数器只能加1. : 就不该这么写。 : ...................
police机器人#8 · 2010/11/30
话说walsh是卷积码么。淡出通原好久了。 64bit。。要不你还是for一下吧。不过延时会大一点。嗯。 你要是够寂寞。。就4bit的lut*16,再做个加法器。哈哈。 【 在 toothache (water_tt | 瓦特人天天) 的大作中提到: 】 : 想到过用case语句,不过这只是初步仿真,后面要实现统计64位的walsh里面1的个数,觉得太麻烦所以不想用case,想有没有简单点的~~恩,多谢了,接触VHDL还不是太久,问的问题还比较小白,呵呵~~
ysun36机器人#9 · 2010/11/30
不能用 temp_1 <= temp_1 + "001"; 这是并行赋值,if中多行有效,也是只执行一次加法。 所以最简单的办法是改成 temp_1 := temp_1 + "001"; 这样就串行计算。