微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 哪位帮我看看这段Verilog代码?运行一下

哪位帮我看看这段Verilog代码?运行一下

时间:10-02 整理:3721RD 点击:

我运行的时候总是出现parameter那段有问题

这个基本功不是很扎实

帮我看看问题在哪

先谢谢了

module
int_div(clock,clk_out);

//I/O口声明

input
clock;
//输入时钟

output
clk_out;
//输出时钟

//内部寄存器

reg
clk_p_r;
//上升沿输出时钟

reg clk_n_r;
//下降沿输出时钟

reg[F_div_WIDTH - 1:0] count_p;
//上升沿脉冲计数器

reg[F_div_WIDTH - 1:0] count_n;
//下降沿脉冲计数器

//参数--分频系数

parameter F_div = 12;
//分频系数<<<<-----修改这里改分频系数

parameter F_div_WIDTH = 16;
//分频计数器宽度

wire full_div_p;
//上升沿计数满标志

wire half_div_p;
//上升沿计数半满标志

wire full_div_n;
//下降沿计数满标志

wire half_div_n;
//下降沿计数半满标志

//判断计数标志位置位与否

assign full_div_p = (count_p < F_div - 1);

assign half_div_p = (count_p < (F_div>>1) - 1);

assign full_div_n = (count_n < F_div - 1);

assign half_div_n = (count_n < (F_div>>1) - 1);

//时钟输出

assign
clk_out = (F_div == 1) ?


clock : (F_div[0] ? (clk_p_r & clk_n_r) : clk_p_r);

//上升沿脉冲计数

always @(posedge clock)

begin


if(full_div_p)


begin


count_p <= count_p + 1;


if(half_div_p)


clk_p_r <= 1'b0;


else


clk_p_r <= 1'b1;


end


else


begin


count_p <= 0;


clk_p_r <= 1'b0;


end

end

//下降沿脉冲计数

always @(negedge clock)

begin


if(full_div_n)


begin


count_n <= count_n + 1;


if(half_div_n)


clk_n_r <= 1'b0;


else


clk_n_r <= 1'b1;


end


else


begin


count_n <= 0;


clk_n_r <= 1'b0;


end

end

endmodule


不晓得你说parameter问题是什么,我这边编译通过,有三个警告。有什么问题剪切下来,别人才好看


不晓得你用什么编译器编译的 啊
你可以看看warning?我编译的问题图贴如下

   

Put parameter declarations before those who reference them
(For your case, count_p and count_n).



    这两句怎么改?能贴出来吗
谢谢了



    从代码上看应该没问题啊?
前面定义了count_p与count_n宽度为F_div_WIDTH 的reg型
后面才定义F_div_WIDTH为常量16

按你的说话先定义F_div_WIDTH为常量16后面再定义count_p与count_n,这样子也不行啊?

?


先parameter再申明reg

下一句:
assign clk_out = (F_div == 1) ? clock : (F_div[0] ? (clk_p_r & clk_n_r) : clk_p_r);
把F_div[0] 改为(F_div &1),试一下。

我记得paramter 不能直接移位。 F_div>>1,这样应该不行

module
int_div(clock,clk_out);
//I/O口声明
input clock;
//输入时钟
output clk_out;
//参数--分频系数
parameter F_div = 12;
//分频系数<<<<-----修改这里改分频系数
parameter F_div_WIDTH = 16;
//输出时钟
//内部寄存器
reg clk_p_r;
//上升沿输出时钟
reg clk_n_r;
//下降沿输出时钟
reg[F_div_WIDTH - 1:0] count_p;
//上升沿脉冲计数器
reg[F_div_WIDTH - 1:0] count_n;
//下降沿脉冲计数器
//分频计数器宽度
wire full_div_p;
//上升沿计数满标志
wire half_div_p;
//上升沿计数半满标志
wire full_div_n;
//下降沿计数满标志
wire half_div_n;
//下降沿计数半满标志
//判断计数标志位置位与否
assign full_div_p = (count_p < F_div - 1);
assign half_div_p = (count_p < (F_div>>1) - 1);
assign full_div_n = (count_n < F_div - 1);
assign half_div_n = (count_n < (F_div>>1) - 1);
//时钟输出
assign
clk_out = (F_div == 1) ?
clock : (F_div[0] ? (clk_p_r & clk_n_r) : clk_p_r);
//上升沿脉冲计数
always @(posedge clock)
begin
if(full_div_p)
begin
count_p <= count_p + 1;
if(half_div_p)
clk_p_r <= 1'b0;
else
clk_p_r <= 1'b1;
end
else
begin
count_p <= 0;
clk_p_r <= 1'b0;
end
end
//下降沿脉冲计数
always @(negedge clock)
begin
if(full_div_n)
begin
count_n <= count_n + 1;
if(half_div_n)
clk_n_r <= 1'b0;
else
clk_n_r <= 1'b1;
end
else
begin
count_n <= 0;
clk_n_r <= 1'b0;
end
end
endmodule
这样语法可以过,功能没时间看

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

网站地图

Top