完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
求大神帮忙看看
o_TxD 通过示波器看看左右抖动很严重 `timescale 1ns / 1ps module Rec_commond( i_clk, //20M i_clk100m, //100M i_rstn, o_TxD, ready // ); input i_clk, i_clk100m; input i_rstn; output o_TxD; output ready; reg [10:0] RegData =11'b010_1010_1010 ; reg pos_ready; reg pos_Sclk; reg start; reg sent; reg o_TxD; reg cnt_start; reg [3:0] cnt_sent; reg [3:0] state; reg Lclk; wire i_clk; wire i_rstn; wire [7:0] k_Sclk = 8'd20; wire [10:0] k_ready = 11'd1000; wire Sclk; wire ready; /////////// ready上升沿识别 always@(posedge i_clk) begin if (~i_rstn) begin start<=0; pos_ready<=0; end else begin pos_ready <= ready; start <= {(~pos_ready) & ready}; end end ///////////Sclk 上升沿识别 always@(posedge i_clk) begin if (~i_rstn) begin sent<=0; pos_Sclk<=0; end else begin pos_Sclk <= Sclk; sent <= {(~pos_Sclk) & Sclk}; end end always @(posedge i_clk)begin if (~i_rstn) begin state <= 4'b0000; o_TxD<=1; end else begin case(state) 4'b0000: if(start)begin state<=4'b0001; // o_TxD <= RegData[0]; end 4'b0001: if(sent)begin state<=4'b0010; o_TxD <= RegData[0]; end 4'b0010: if(sent)begin state<=4'b0011; o_TxD <= RegData[1]; end 4'b0011: if(sent)begin state<=4'b0100; o_TxD <= RegData[2]; end 4'b0100: if(sent)begin state<=4'b0101; o_TxD <= RegData[3]; end 4'b0101: if(sent)begin state<=4'b0110; o_TxD <= RegData[4]; end 4'b0110: if(sent)begin state<=4'b0111; o_TxD <= RegData[5]; end 4'b0111: if(sent)begin state<=4'b1000; o_TxD <= RegData[6]; end 4'b1000: if(sent)begin state<=4'b1001; o_TxD <= RegData[7]; end 4'b1001: if(sent)begin state<=4'b1010; o_TxD <= RegData[8]; end 4'b1010: if(sent)begin state<=4'b1011; o_TxD <= RegData[9]; end 4'b1011: if(sent)begin state<=4'b0000; o_TxD <= RegData[10]; end default:state<=4'b0000; endcase end end ////////////////分频得到1M Sclk Sclk U_Sclk( .i_clk(i_clk), .i_rstn(i_rstn), .k(k_Sclk), .clkk(Sclk) //1M ); //////////////////分频得到ready 20k ready U_ready( .i_clk(i_clk), .i_rstn(i_rstn), .k(k_ready), .clkk(ready) //ready 20k ); endmodule |
|
相关推荐
|
|
回帖奖励 +1 分积分
抖动说明你程序哪边有问题
|
|
|
|
|
|
采沿的时候要用第二拍和第三拍,不能用第一拍和第二拍,你多打俩拍就好了!sent <= {(~pos_Sclk) & Sclk};
start <= {(~pos_ready) & ready}; 这两个地方,这是跨时钟域,不能用第一拍的东西! |
|
|
|
|
|
1452 浏览 1 评论
1246 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1454 浏览 0 评论
916 浏览 0 评论
2255 浏览 0 评论
1434 浏览 35 评论
5623 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 06:29 , Processed in 0.630038 second(s), Total 69, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号