微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请教verilog高手!

请教verilog高手!

时间:10-02 整理:3721RD 点击:
请教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
可总是出现错误 请大家指教,万分感谢!

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
这里有问题

谢谢楼上,我也觉得不应该是这样 但是我想不出来怎样解决我觉得
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
这四句应该是并行运行的 但是实际要求应该是有先后顺序的实现,不知道怎么解决!还请多多指教
再次感谢关注!

你说的并行执行不太明白阿,你是说这四个语句的信号需要在四个通道上一起输出还是别的意思?

就根据你说得话,我揣摩了下,给出这么个处理过程,你的意思说这四路信号应该是有个先后顺序输出是吧,我建议是做一个计数器,计数器的值为1输出第一路,计数器为2 输出第二路,依次下去;计数器的计数方式为在你输出每路信号的同时加1,从1加到4,当计数器为4的时候,输出信号后,把计数器置为1(当然从实际情况说,应该是从0加到3再归零这么个循环过程).不知道你是不是这么个意思,仅作参考.
主要本人一直在FPGA上进行综合调试,好久没有进行仿真了,repeat的使用不太清楚了,望见谅

特别感谢楼上,我这就试试看,如果不行还要请你多指教 呵呵,我的意思就是让这四句有个先后顺序输出

仿真的话,可以用延时语句,比如#5;
要综合的话,使用计数器和case语句就可以了

应该是可以的,确实我跟你说的方法是可综合的方法 不明白的地方,如果我能解答就帮你

你的是组合逻辑,要用"="而不是"<=",组合逻辑用"="分先后顺序,"<="是时序逻辑(要有时钟输入)是同时执行的,并且你这个如果用时序逻辑也是不合理的,在一个时序always模块对同一个reg变量进行几次没有选择语句的赋值本身就是不合理的,也是没有意义的。
如果用组合逻辑分先后顺序的话这个执行速度很快,最好加一下延迟。

你的repeat(ad)下的begin...end之间的语句中,多个begin和end应当是并行执行的,相当于同时向端口am和bm写不同的数,这样肯定会出错。这样写的程序数据输出没有控制时序,建议加入时钟,按时钟节拍来控制数据输出。

请教:下面的程序的 throughput 为什么是2.7bits/clock?谢谢
module powerv3(
output [7:0] XPower,
output
finished,
input [7:0] X,
input
clk,
input
start
);
reg [7:0] ncount;
reg [7:0] XPower1;
assign finished = (ncount == 0);
assign XPower = XPower1;
always@(posedge clk)
if(start)
begin
XPower1 <= X;
ncount <= 2;
end
else if(!finished)
begin
ncount <= ncount - 1;
XPower1 <= XPower1 * X;
end
endmodule

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top