利用条件语句实现不同占空比的分频时钟电路
来源:互联网 发布:苹果的ar软件 编辑:程序博客网 时间:2024/05/01 13:44
1,要实现的是如下的一个“产生占空比不同的分频时钟”:
(1)、建模:
module fdivision_module(clock,d_clock,reset,j);
input clock,reset;
output d_clock,j;
reg d_clock;
reg [2:0]j;
always @(posedge clock)
begin
if(!reset)
//初始化过程
begin
d_clock<=0;
j<=0;
end
else
begin
if(j==4)
j<=0;
else if(j==1)
begin
d_clock=1;
j<=j+1;
end
else
begin
d_clock=0;
j<=j+1;
end
end
end
endmodule
(2)testbench:
`include "fdivision_module.v"
module fdivision_stimulus;
reg clock,reset;
wire d_clock;
wire [2:0]j;
fdivision_module fd(clock,d_clock,reset,j);
initial
begin
clock=0;
forever #5 clock=~clock;
end
initial
begin
reset=0;
#20 reset=1;
#100 reset=1;
#5 reset=1;
end
(3)、正确仿真波形:
2、出现的问题及解决办法:
(1)、第一次的仿真结果如下:由图可见,在reset置0的时候,d_clock并没有置0,没有初始化;
(2)、为了调试程序,我将局部变量j也作为输出变量,得到下面的仿真结果:局部起到计数的变量一直为未知量x。
(3)、改动程序,将reset也放入always的敏感列表中,写成always @(posedge clock,negedge reset),得到下面的结果:很显然,尽管仿真出结果,但是占空比错误,这个错归根结底还是在于计数器的设定,开始我写成(j==5)时,j<=0;(j==2)时,d_clock=1;特别很明显0~5总共经历了6个时钟。所以,建模过程中,要特别注意计数器j的设定。
(4),现在回过头来想想最开始的建模有什么错误,在2.3中,将reset置于敏感列表中,写成always @(posedge clock,negedge reset),这相当于异步置0 ,reset的置0信号是不受时钟控制的,只要reset=0,就能将d_clock和j置0。但是在最开始错误的2.1中,敏感列表为always @(posedge clock),再在后面过程块中写,reset=0时,j=0,d_clock=0;那么这时的reset置0为同步置0,只有当上升沿出现时,才生效,给j和d_clock赋值。但是,我在testbench模块中,给reset的赋值如下图:很显然,在0~5ns时,reset=0,#5ns之后reset=1,则当#10ns,上升沿到来时,reset已经为1,不能再给j和d_clock赋值了,所以造成了2.1的错误。特别值得注意的是,在异步置0时,reset=0的保持时间可以任意,但同步置0时,reset=0的保持时间需要大于一个时钟,否则就会出现上面上升沿还没到来,reset就为1,不能赋值的错误。
- 利用条件语句实现不同占空比的分频时钟电路
- 1/2占空比的五分频电路实现
- verilog实现占空比为1/2的奇数分频电路
- 【温故而知新】【2】时钟分频-奇数50%占空比
- 三分频50%占空比电路的VHDL可综合代码
- NO.1 基于verilogHDL的时钟分频与任意占空比调节
- Verilog实现任意分频和占空比
- vhdl 非百分之五十占空比的七分频
- vhdl 等占空比四分频
- Verilog--奇数分频与偶数分频及占空比
- FPGA任意奇偶数分频占空比50%
- FPGA利用待分频时钟实现任意分频
- 时钟的奇数分频
- 单片机的时钟分频
- STM32一个Timer输出4路不同频率、可调占空比的PWM
- STM32一个Timer输出4路不同频率、可调占空比的PWM
- STM32一个Timer输出4路不同频率、可调占空比的PWM
- 用Verilog实现电路分频
- linux exec用法总结
- 原始套接字之PING(7)
- HTTP错误处理及快照隔离事务访问
- vs2008 组合键不能用
- Poj2586(java实现)
- 利用条件语句实现不同占空比的分频时钟电路
- Java IO详解
- LeetCode 136 Single Number
- 输入一个整数输出位数(整数限10位以内)
- Struts2 登录示例
- UVA 10600 ACM Contest and Blackout(次小生成树)
- 一致性hash和simhash
- 正则表达式——\b及(千分位实现)
- X264参考手册