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