课程实践,编写简单的模13奇数分频器
编写程序实在找不出来什么问题,但是仿真始终没有波形
这是分频器的代码
module fenpin13
(input clk,reset,
output wire cout);
reg [4:0]m,n;
reg cout1,cout2;
assign cout=cout1|cout2;
always @(posedge clk)
begin if(!reset) begin cout1<=0;m<=0;end
else
begin if(m==12) m<=0;else m<=m+1;
if(m<6) cout1<=1;else cout1<=0;
end
end
always @(posedge clk)
begin if(!reset) begin cout2<=0;n<=0;end
else begin
if(n==12) n<=0;else n<=n+1;
if(n<6) cout2<=1;else cout2<=0;end
end
endmodule
这是testbench文件的代码
`timescale 1ns/1ns
module fenpin13_tb;
reg clk,reset;
wire cout,cout1,cout2;
wire [4:0]m,n;
fenpin13 u1(clk,reset,cout);
parameter PERIOD=100;
initial
begin
reset=0;clk=0;
#40 reset=1;
forever
#(PERIOD/2) clk=~clk;
end
endmodule
最后运行modelsim始终无波形
本人是初学者,希望可以多指教,谢谢!
1:fenpin13 奇数分频,需要用上升沿和下降沿分别计数分频后再合成
第二个分频改用 always @(negedge clk)
2:仿真部分,复位信号时间太短
3:仿真部分,复位信号有效时要有时钟触发
module fenpin13
(
input clk,reset,
output wire cout
);
reg [4:0]m,n;
reg cout1,cout2;
assign cout=cout1|cout2;
always @(posedge clk)
begin
if(!reset)
begin
cout1<=0;
m<=0;
end
else
begin
if(m==12) m<=0;
else m<=m+1;
if(m<6) cout1<=1;
else cout1<=0;
end
end
always @(negedge clk)
begin
if(!reset)
begin
cout2<=0;
n<=0;
end
else
begin
if(n==12) n<=0;
else n<=n+1;
if(n<6) cout2<=1;
else cout2<=0;
end
end
endmodule
`timescale 1ns/1ns
module fenpin13_tb;
reg clk,reset;
wire cout,cout1,cout2;
wire [4:0]m,n;
fenpin13 u1(clk,reset,cout);
parameter PERIOD=100;
initial
begin
reset=0;
clk=0;
#200 reset=1;
end
always
#(PERIOD/2) clk=~clk;
endmodule