请教一个xilinx 时钟的问题
各位好!我有一个xilinx ML506的板子,下了个简单的组合逻辑电路测试 结果OK。
然后下个时序逻辑就出错了。。。
我的代码如下:
module LED( c, my_clk
);
input my_clk;
output reg c;
wire clk;
initial begin
c = 1;
end
always @(posedge clk) begin
c <= ~c;
end
div_clk uut (
.my_clk(my_clk),
.clk(clk)
);
endmodule
module div_clk(my_clk, clk
);
input my_clk;
output reg clk;
reg counter;
initial begin
counter = 0;
end
always @(posedge my_clk) begin
if (counter == 10000) begin
counter <= 0;
clk <= ~clk;
end
else begin
clk <= clk;
counter <= counter + 1;
end
end
endmodule
约束文件如下:
#" PlanAhead Generated physical constraints "
NET "c" LOC = H18
#"Created by Constraints Editor (xc5vsx50t-ff1136-1) - 2011/04/01"
NET "my_clk" TNM_NET = my_clk
TIMESPEC TS_my_clk = PERIOD "my_clk" 1 ms HIGH 50% INPUT_JITTER 10 us
#"Created by Constraints Editor (xc5vsx50t-ff1136-1) - 2011/04/02"
OFFSET = OUT 50 ns AFTER "my_clk"
结果是:c信号对应管脚的灯一直亮着!当我把counter设为500 时,灯则是闪一下就灭了!
求教了 ! thx 1.intial语句是不可综合的,它只用在测试文件。你要是想对c和counter赋初值,你可以采用复位的方式。例如:
always @(posedge clk,negedge rst)
begin
if(!rst) //一般板子是低电平复位,且是上电就复位
begin
c<=1'b1;
end
else
begin
c<=~c;
end
end
你要是改成500的话,不应该是亮了一下,应该是一直亮的,只是亮度变低。你可以做个仿真先…… 哦十全_至芯学员 你好!
按你所说我进行了修改。另外,修改了一下 div_clk模块:
module div_clk(clk_in, clk, rst
);
input clk_in;
input rst;
output reg clk;
reg counter;
// initial begin
// counter = 0;
// end
always @(posedge clk_in, negedge rst) begin
if(!rst) begin
counter <= 0;
end
else if(counter >= 2000) begin
counter <= 0;
clk <= 0;
end
else if(counter < 1000) begin
clk <= 0;
counter <= counter + 1;
end
else if((counter >= 1000) && (counter < 2000))begin
clk <= 1;
counter <= counter +1;
end
end
endmodule
实验结果: 下载后led没亮,rst到来(1->0),灯亮,rst(0->1)(或其他操作) 等持续亮着。
会不会是我没有把时钟信号clk_in 引进来呢?
thx top module:
module LED( c, clk_in, rst
);
input clk_in;
input rst;
output reg c;
wire clk;
always @(posedge clk,negedge rst) begin
if(!rst) begin
c <= 1;
end
else begin
c <= ~c;
end
end
div_clk uut (
.clk_in(clk_in),
.clk(clk),
.rst(rst)
);
endmodule 1.rst复位信号接在板子上复位键,你先检查下你的板子是低电平复位还是高电平复位。
2.灯灭亮的频率太快的话,人眼分辨不出来的。我们的日光灯用的是50HZ的交流电,我们看不出它的变化。所以建议你分频后的频率小些。下面是我写的程序你试一试,我们共同学习啊。
module LED( c,
clk_in,
rst
);
input clk_in;
input rst;
output c;
wire clk;
reg c;
reg counter;
always @(posedge clk_in,negedge rst)
begin
if(!rst)
begin
counter<=1'b0;
end
else
begin
counter<=counter+1'b1;
end
end
assign clk=counter;
always @(posedge clk,negedge rst)
begin
if(!rst)
begin
c<=1'b0;
end
else
begin
c<=~c;
end
end
endmodule 谢谢先哦 :)
我再试试,还有我想问一下:时钟管脚要怎么连,怎么配置呢?
我是连到一个管脚,还做了时序约束。这样是否正确? assignment——pins连接就行了,不用做时序约束。我现在还在学习中,至于约束这块老师还没有深入讲解。等我会了,咱们在探讨。 呵呵 我就是很怀疑有没有吧时钟信号连接进去 呵呵
到时候多讨论啊 呵呵 我就是很怀疑有没有吧时钟信号连接进去 呵呵
到时候多讨论啊 问题已解决! 的确是时钟没有引进来,管脚分配出错了!
原:H17 3 IO_L0P_CC_GC_3
改:L19 3 IO_L5P_GC_3
感谢帮助!!
页:
[1]