vivado入门---FPGA 奇数分频占空比50%-- 含testbench

如果对占空比没有明确的要求,则可以直接对上升沿计数:
计数到(N-1)/2 时让输出翻转
计数到(N-1)时让输出状态再次翻转
并将计数器清零,这样就可以得到一个占空比为2:3的N分频(N为奇数)的分频器。

如果要实现50%的占空比,可以通过“错位相或”的方法实现。
具体方法是用刚才的方法先通过对上升沿计数产生一个占空比为不是50%的N分频器,
再用同样的方法对下降沿计数产生一个占空比也不是50%的N分频器
最后将这两个分频器的输出进行“或”运算,就可以得到占空比为50%的奇数N分频器。
1.程序
所遇到的bug:
1)verilog与c不同,只有高与低两种表达方式,所以++等只能用多位数拼接。
2)如果一个值为多位,那么在测试文件中也需要多位。需要描述,不然虽然该数属于中间量,但仿真图中数据会看不懂,造成误解。
3)一个输出值不可以在测试文件中给它值,失去输出的意义,同时也给不了,因为类型不对。强行给值会报错。输出值可以在程序中初始化的时候给出,程序运行到下面语句块的时候,always并行重复,但不会初始化,所以不需要担心。
【】【】【】【】

程序如下:

module test(clk,gdp,ddp,out,add,n,m);
input clk;
output out,add,m,n,gdp,ddp;

reg [0:3]n=4'b1;
reg [0:3]m=4'b1;
reg gdp=1,ddp=0,out;
//高电平持续(add-1)/2 -1时钟 
always @(posedge clk)
    begin
     if (n<4'd4) 
         begin 
            gdp<=1;
            n<=n+1'b1;
         end
     else 
         begin
            gdp<=0;
            n<=n+1'b1;
            if (n==4'd7)
                n<=4'b1;
         end
    
    end
//低电平持续(add-1)/2 +1时钟  
always @(negedge clk)
   begin
  if (m<4'd4) 
      begin 
         ddp<=1;
         m<=m+1'b1;
      end
  else 
      begin
         ddp<=0;
         m<=m+1'b1;

         if (m==4'd7)
             m<=4'b1;
      end
 
 end
  
always @(posedge clk or negedge clk)  
    begin
        out=gdp||ddp;
    end    
    
Endmodule

测试文件:

module testbench;  
   
   reg clk;
   
   wire ddp;
   wire gdp;
      
   wire out;
   wire add;
   wire [3:0]m;
   wire [3:0]n;

    
   test  test(
   .clk(clk),
   .out(out),
   .gdp(gdp),
   .ddp(ddp),
   .add(add),
   .m(m),
   .n(n)
   );
   
   initial begin
   clk =1;
   #100;
   end
   
   always #20 clk =~clk;
  
Endmodule
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值