找回密码
 注册
搜索
查看: 996|回复: 2

[讨论] 求助:用verilog编了个小程序,老是综合出错,请各位前辈帮忙看看!

[复制链接]
发表于 2012-3-23 10:51:52 | 显示全部楼层 |阅读模式
要实现的功能:用FPGA产生一个脉冲信号(方波),在这个脉冲信号的特定位置产生一个尖峰信号,尖峰信号的位置和脉宽要可控。

我的想法是:用计数器对系统时钟进行分频得到脉冲信号,然后用两倍脉冲信号的采样频率对脉冲信号进行采样,在指定位置让脉冲信号翻转,等待一定时延后恢复。

现在的问题是:

1)上面想法可行否?

2)要求程序要可综合,但是好像“#”等时延语句是不可综合的,不知怎么实现信号翻转之后的恢复?

下面附上我的程序:

module ScrSystem(clk48M,rst,aout);
input clk48M;
input rst;
output aout;

reg [7:0] cnt1;             //用来分频系统时钟得到采样时钟信号
reg [8:0] cnt2;             //用来分频系统时钟得到脉冲信号
reg [3:0] cnt3;             //用来检测采样时钟信号上升沿并计数
reg aout_reg;
wire a_clk;
wire a;

parameter Dly_TIME = 20;            //毛刺脉宽参数

assign a_clk = cnt1[7];
assign a = cnt2[8];

always@(posedge clk48M or posedge rst)         //产生脉冲时钟信号和脉冲翻转控制时钟信号
begin
  if(rst)
  begin
    cnt1 <= 8'd0;
    cnt2 <= 9'd0;
  end
  else
    cnt1 <= cnt1+8'd1;
    cnt2 <= cnt2+9'd1;
end

always@(posedge a_clk or posedge rst)           //给脉冲信号加毛刺
begin
  if(rst)
    cnt3 <= 4'd0;
  else
    cnt3 <= cnt3+4'd1;
end

always@(posedge a_clk)
begin
  if(cnt3 == 4'b1000)
  begin
    aout_reg = ~a;
    #Dly_TIME aout_reg = a;
  end
  else
    aout_reg = a;
end

assign aout = aout_reg;
endmodule

刚开始学FPGA,第一次尝试写程序,完全是抓瞎啊。。。感觉有很多问题,但是就是找不出来。。。请各位前辈帮忙看看,指点一二,十分感谢!!!
[em13]
 楼主| 发表于 2012-3-23 15:49:55 | 显示全部楼层
检查了一下,发现第一个always的else后面没有加begin...end,已经加上了,但是功能仿真的结果还是错误,请大家帮忙看看还有什么错误!谢谢了!
另外,怎么在指定延时单位呢?用''timescale语句老是提示错误。。。, 补充:
“cnt1 <= 8\'d0; cnt2 <= 9\'d0;”里面的“\”是没有的,不知道怎么复制过来就有了,所以这个错误不算哦。。。
...
点评回复

使用道具 举报

 楼主| 发表于 2012-3-23 15:42:24 | 显示全部楼层
检查了一下,发现第一个always的else后面没有加begin...end,已经加上了,但是功能仿真的结果还是错误,请大家帮忙看看还有什么错误!谢谢了!
另外,怎么在指定延时单位呢?用'timescale语句老是提示错误。。。
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-24 01:03 , Processed in 0.045833 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表