在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3361|回复: 10

请教verilog高手!!

[复制链接]
发表于 2008-4-11 14:35:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
请教verilog高手 最近学习verilog 用它实现一个程序功能如下:输入8位ad,输出为四位am,bm
功能:输入信号ad
    则如下语句
  
  am<=4'b1111; bm<=4'b0000;

    am<=4'b1110; bm<=4'b0110;

    am<=4'b1011; bm<=4'b1011;

    am<=4'b0110; bm<=4'b1110;

要循环ad次,注am和bm是成对出现的
我想用repeat语句实现
module testone(ad,am,bm);
  input[7:0] ad;
  output[3:0] am;
  output[3:0] bm;
  reg[3:0] am;
  reg[3:0] bm;
always@(ad)
begin
  repeat(ad)
  begin
    begin am<=4'b1111; bm<=4'b0000; end

    begin am<=4'b1110; bm<=4'b0110; end

    begin am<=4'b1011; bm<=4'b1011; end

    begin am<=4'b0110; bm<=4'b1110; end
  end
  end
endmodule     
可总是出现错误 请大家指教,万分感谢!!
发表于 2008-4-11 14:37:53 | 显示全部楼层
repeat(ad)
  begin
    begin am<=4'b1111; bm<=4'b0000; end

    begin am<=4'b1110; bm<=4'b0110; end

    begin am<=4'b1011; bm<=4'b1011; end

    begin am<=4'b0110; bm<=4'b1110; end
  end

这里有问题
 楼主| 发表于 2008-4-11 15:11:48 | 显示全部楼层
谢谢楼上,我也觉得不应该是这样 但是我想不出来怎样解决我觉得
    begin am<=4'b1111; bm<=4'b0000; end
    begin am<=4'b1110; bm<=4'b0110; end
    begin am<=4'b1011; bm<=4'b1011; end
    begin am<=4'b0110; bm<=4'b1110; end
这四句应该是并行运行的 但是实际要求应该是有先后顺序的实现,不知道怎么解决!!还请多多指教
再次感谢关注!
发表于 2008-4-11 15:49:06 | 显示全部楼层
你说的并行执行不太明白阿,你是说这四个语句的信号需要在四个通道上一起输出还是别的意思?
发表于 2008-4-11 15:55:57 | 显示全部楼层
就根据你说得话,我揣摩了下,给出这么个处理过程,你的意思说这四路信号应该是有个先后顺序输出是吧,我建议是做一个计数器,计数器的值为1输出第一路,计数器为2 输出第二路,依次下去;计数器的计数方式为在你输出每路信号的同时加1,从1加到4,当计数器为4的时候,输出信号后,把计数器置为1(当然从实际情况说,应该是从0加到3再归零这么个循环过程).不知道你是不是这么个意思,仅作参考.
主要本人一直在FPGA上进行综合调试,好久没有进行仿真了,repeat的使用不太清楚了,望见谅
 楼主| 发表于 2008-4-11 15:58:50 | 显示全部楼层
特别感谢楼上,我这就试试看,如果不行还要请你多指教 呵呵,我的意思就是让这四句有个先后顺序输出
发表于 2008-4-12 09:52:53 | 显示全部楼层
仿真的话,可以用延时语句,比如#5;
要综合的话,使用计数器和case语句就可以了
发表于 2008-4-12 10:19:53 | 显示全部楼层


应该是可以的,确实我跟你说的方法是可综合的方法 不明白的地方,如果我能解答就帮你
发表于 2008-4-12 22:06:08 | 显示全部楼层
你的是组合逻辑,要用"="而不是"<=",组合逻辑用"="分先后顺序,"<="是时序逻辑(要有时钟输入)是同时执行的,并且你这个如果用时序逻辑也是不合理的,在一个时序always模块对同一个reg变量进行几次没有选择语句的赋值本身就是不合理的,也是没有意义的。
如果用组合逻辑分先后顺序的话这个执行速度很快,最好加一下延迟。
发表于 2008-4-13 16:44:30 | 显示全部楼层
你的repeat(ad)下的begin...end之间的语句中,多个begin和end应当是并行执行的,相当于同时向端口am和bm写不同的数,这样肯定会出错。这样写的程序数据输出没有控制时序,建议加入时钟,按时钟节拍来控制数据输出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-12 18:25 , Processed in 0.041725 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表