亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? serial.v

?? 一些Verilog學習程序B
?? V
字號:
/*
本模塊的功能是驗證實現和PC機進行基本的串口通信的功能。需要在PC機上安裝一個串口調試工具來驗證程序的功能。
程序實現了一個收發一幀10個bit(即無奇偶校驗位)的串口控制器,10個bit是1位起始位,8個數據位,1個結束位。
串口的波特律由程序中定義的div_par參數決定,更改該參數可以實現相應的波特率。程序當前設定的div_par 的值
是0x145,對應的波特率是9600。用一個8倍波特率的時鐘將發送或接受每一位bit的周期時間劃分為8個時隙以使通
信同步.

程序的基本工作過程是,按動一個按鍵 控制器向PC的串口發送“welcome",
PC機接收后顯示驗證數據是否正確(串口調試工具設成按ASCII碼接受方式).
PC可隨時向CPLD發送0-F的十六進制數據,CPLD接受后顯示在7段數碼管上.
*/
module serial(clk,rst,rxd,txd,en,seg_data,key_input,lowbit);

input clk,rst;
input rxd;//串行數據接收端
input key_input;//按鍵輸入

output[7:0] en;
output[7:0] seg_data;
reg[7:0] seg_data;
output txd;//串行數據發送端
output lowbit;


////////////////////inner reg////////////////////
reg[15:0] div_reg;//分頻計數器,分頻值由波特率決定。分頻后得到頻率8倍波特率的時鐘
reg[2:0]  div8_tras_reg;//該寄存器的計數值對應發送時當前位于的時隙數
reg[2:0]  div8_rec_reg;//該寄存器的計數值對應接收時當前位于的時隙數
reg[3:0] state_tras;//發送狀態寄存器
reg[3:0] state_rec;//接受狀態寄存器
reg clkbaud_tras;//以波特率為頻率的發送使能信號
reg clkbaud_rec;//以波特率為頻率的接受使能信號
reg clkbaud8x;//以8倍波特率為頻率的時鐘,它的作用是將發送或接受一個bit的時鐘周期分為8個時隙

reg recstart;//開始發送標志
reg recstart_tmp;

reg trasstart;//開始接受標志

reg rxd_reg1;//接收寄存器1
reg rxd_reg2;//接收寄存器2,因為接收數據為異步信號,故用兩級緩存
reg txd_reg;//發送寄存器
reg[7:0] rxd_buf;//接受數據緩存
reg[7:0] txd_buf;//發送數據緩存

reg[2:0] send_state;//每次按鍵給PC發送"Welcome"字符串,這是發送狀態寄存器
reg[19:0] cnt_delay;//延時去抖計數器
reg start_delaycnt;//開始延時計數標志
reg key_entry1,key_entry2;//確定有鍵按下標志

////////////////////////////////////////////////
parameter div_par=16'h145;//分頻參數,其值由對應的波特率計算而得,按此參數分頻的時鐘頻率是波倍特率的8	
		  //倍,此處值對應9600的波特率,即分頻出的時鐘頻率是9600*8  (CLK  50M)

////////////////////////////////////////////////
assign txd=txd_reg;
assign lowbit=0;

assign en=0;//7段數碼管使能信號賦值

always@(posedge clk )
begin
	if(!rst) begin 
		cnt_delay<=0;
		start_delaycnt<=0;
	 end
	else if(start_delaycnt) begin
		if(cnt_delay!=20'd800000) begin
			cnt_delay<=cnt_delay+1;
		 end
		else begin
			cnt_delay<=0;
			start_delaycnt<=0;
		 end
	 end
	else begin
		if(!key_input&&cnt_delay==0)
				start_delaycnt<=1;
	 end
end

always@(posedge clk)
begin
	if(!rst) 
		key_entry1<=0;
	else begin
		if(key_entry2)
			key_entry1<=0;
		else if(cnt_delay==20'd800000) begin
			if(!key_input)
				key_entry1<=1;
		 end
	 end
end

always@(posedge clk )
begin
	if(!rst)
		div_reg<=0;
	else begin
		if(div_reg==div_par-1)
			div_reg<=0;
		else
			div_reg<=div_reg+1;
	 end
end

always@(posedge clk)//分頻得到8倍波特率的時鐘
begin
	if(!rst)
		clkbaud8x<=0;
	else if(div_reg==div_par-1)
		clkbaud8x<=~clkbaud8x;
end


always@(posedge clkbaud8x or negedge rst)
begin
	if(!rst)
		div8_rec_reg<=0;
	else if(recstart)//接收開始標志
		div8_rec_reg<=div8_rec_reg+1;//接收開始后,時隙數在8倍波特率的時鐘下加1循環
end

always@(posedge clkbaud8x or negedge rst)
begin
	if(!rst)
		div8_tras_reg<=0;
	else if(trasstart)
		div8_tras_reg<=div8_tras_reg+1;//發送開始后,時隙數在8倍波特率的時鐘下加1循環
end

always@(div8_rec_reg)
begin
	if(div8_rec_reg==7)
		clkbaud_rec=1;//在第7個時隙,接收使能信號有效,將數據打入
	else
		clkbaud_rec=0;
end

always@(div8_tras_reg)
begin
	if(div8_tras_reg==7)
		clkbaud_tras=1;//在第7個時隙,發送使能信號有效,將數據發出
	else
		clkbaud_tras=0;
end

always@(posedge clkbaud8x or negedge rst)
begin
	if(!rst) begin
		txd_reg<=1;
		trasstart<=0;
		txd_buf<=0;
		state_tras<=0;
		send_state<=0;
		key_entry2<=0;
	 end
	else begin
		if(!key_entry2) begin
			if(key_entry1) begin
				key_entry2<=1;
				txd_buf<=8'd119; //"w"
			 end
		 end
		else  begin
			case(state_tras)
				4'b0000: begin  //發送起始位
					if(!trasstart&&send_state<7) 
						trasstart<=1;
					else if(send_state<7) begin
						if(clkbaud_tras) begin
							txd_reg<=0;
							state_tras<=state_tras+1;
						 end
					 end
					else begin
						key_entry2<=0;
						state_tras<=0;
					 end					
				end		
				4'b0001: begin //發送第1位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b0010: begin //發送第2位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				 4'b0011: begin //發送第3位
				 	if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b0100: begin //發送第4位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b0101: begin //發送第5位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b0110: begin //發送第6位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b0111: begin //發送第7位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b1000: begin //發送第8位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b1001: begin //發送停止位
					if(clkbaud_tras) begin
						txd_reg<=1;
						txd_buf<=8'h55;
						state_tras<=state_tras+1;
					 end
				 end
				4'b1111:begin 
					if(clkbaud_tras) begin
						state_tras<=state_tras+1;
						send_state<=send_state+1;
						trasstart<=0;
						case(send_state)
							3'b000:
								txd_buf<=8'd101;//"e"
							3'b001:
								txd_buf<=8'd108;//"l"
							3'b010:
								txd_buf<=8'd99;//"c"
							3'b011:
								txd_buf<=8'd111;//"o"
							3'b100:
								txd_buf<=8'd109;//"m"
							3'b101:
								txd_buf<=8'd101;//"e"
							default:
								txd_buf<=0;
						 endcase
					 end
				 end
				default: begin
					if(clkbaud_tras) begin
						state_tras<=state_tras+1;
						trasstart<=1;
					 end
				 end
			 endcase
		 end
	 end
end

always@(posedge clkbaud8x or negedge rst)//接受PC機的數據
begin
	if(!rst) begin
		rxd_reg1<=0;
		rxd_reg2<=0;
		rxd_buf<=0;
		state_rec<=0;
		recstart<=0;
		recstart_tmp<=0;
	 end
	else  begin
		 rxd_reg1<=rxd;
		 rxd_reg2<=rxd_reg1;
		 if(state_rec==0) begin
			 if(recstart_tmp==1) begin
		 		recstart<=1;
		 		recstart_tmp<=0;
				state_rec<=state_rec+1;
		  	  end
		 	 else if(!rxd_reg1&&rxd_reg2) //檢測到起始位的下降沿,進入接受狀態
				recstart_tmp<=1;
		   end
		 else if(state_rec>=1&&state_rec<=8) begin
		 	 if(clkbaud_rec) begin
			 	rxd_buf[7]<=rxd_reg2;
				rxd_buf[6:0]<=rxd_buf[7:1];
				state_rec<=state_rec+1;
			  end
		  end
		 else if(state_rec==9) begin
		 	if(clkbaud_rec) begin
		 		state_rec<=0;
				recstart<=0;
			 end
		  end
	  end
end

always@(rxd_buf) //將接受的數據用數碼管顯示出來
begin
      case (rxd_buf)
		8'h30:
			seg_data=8'b11000000;
		8'h31:
			seg_data=8'b11111001;
		8'h32:
			seg_data=8'b10100100;
		8'h33:
			seg_data=8'b10110000;
		8'h34:
			seg_data=8'b10011001;
		8'h35:
			seg_data=8'b10010011;
		8'h36:
			seg_data=8'b10000010;
		8'h37:
			seg_data=8'b11111000;
		8'h38:
			seg_data=8'b10000000;
		8'h39:
			seg_data=8'b10010000;
		8'h41:
			seg_data=8'b00010001;
		8'h42:
			seg_data=8'b11000001;
		8'h43:
			seg_data=8'b0110_0011;
		8'h44:
			seg_data=8'b1000_0101;
		8'h45:
			seg_data=8'b0110_0001;
		8'h46:
			seg_data=8'b0111_0001;
		default:
			seg_data=8'b1111_1111;
	 endcase
end	

endmodule
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产丶欧美丶日本不卡视频| 91麻豆精品国产91久久久久久 | 一区二区三区鲁丝不卡| 成人精品视频一区| 欧美国产97人人爽人人喊| 激情久久五月天| 日韩av电影免费观看高清完整版| 国产一区二区三区在线观看免费| 欧美影院午夜播放| 国产午夜精品在线观看| 日韩精品视频网站| 99v久久综合狠狠综合久久| 日韩亚洲电影在线| 悠悠色在线精品| 毛片不卡一区二区| 在线免费av一区| 中文字幕欧美日韩一区| 捆绑变态av一区二区三区| 欧美在线高清视频| 成人免费一区二区三区在线观看| 精品一区二区三区av| 欧美剧情片在线观看| 一区二区三区在线观看网站| 综合久久国产九一剧情麻豆| 国产不卡在线视频| 日本一区二区免费在线观看视频 | 国产亚洲精品7777| 蜜桃免费网站一区二区三区| 石原莉奈一区二区三区在线观看| 91极品美女在线| 最新国产成人在线观看| av不卡一区二区三区| 国产精品国产自产拍高清av | 国产日本欧美一区二区| 国产一区二区三区免费看| 欧美电视剧免费全集观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 宅男噜噜噜66一区二区66| 日本一区二区久久| 亚洲免费电影在线| 天使萌一区二区三区免费观看| 国产一区二区在线看| 亚洲不卡av一区二区三区| 亚洲一区中文在线| 亚洲综合无码一区二区| 欧美高清在线一区二区| 欧美日韩国产一级片| 成人视屏免费看| 91免费国产视频网站| 欧美一区二区黄色| 香蕉久久一区二区不卡无毒影院| 欧美午夜精品免费| 蜜桃av一区二区| 久久精品视频免费观看| a亚洲天堂av| 性做久久久久久免费观看欧美| 欧美激情一区二区三区在线| 欧美一区二区视频网站| 3d成人h动漫网站入口| 欧美成人a视频| ...中文天堂在线一区| 奇米四色…亚洲| 国产精品中文有码| 欧美色网一区二区| 久久女同性恋中文字幕| 亚洲三级在线播放| 精品一区二区三区视频在线观看| 风间由美一区二区av101| 久久99国产精品麻豆| 色综合久久九月婷婷色综合| 91.麻豆视频| 亚洲精品乱码久久久久久| 欧美巨大另类极品videosbest | 亚洲一区二区中文在线| 国产精品入口麻豆原神| 日韩在线卡一卡二| 日韩免费在线观看| 91黄色免费看| 91在线精品一区二区| 91精品一区二区三区久久久久久| 国产尤物一区二区在线| 亚洲一区影音先锋| 国产女主播视频一区二区| 欧美精品高清视频| 99精品视频在线观看免费| 久久aⅴ国产欧美74aaa| 亚洲电影一区二区三区| 国产精品久久国产精麻豆99网站| 日韩一级完整毛片| 色综合天天综合网国产成人综合天 | 91精品国产欧美日韩| 99精品久久久久久| 国产成人午夜精品5599| 免费av网站大全久久| 一区二区三区欧美久久| 国产精品久久免费看| 精品1区2区在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲免费观看高清完整版在线观看| 337p日本欧洲亚洲大胆精品| 日韩一二三区视频| 欧美日本一区二区三区四区| 色系网站成人免费| 99re8在线精品视频免费播放| 国产精品2024| 国产黑丝在线一区二区三区| 六月丁香婷婷久久| 蜜桃精品视频在线| 久久精品国产免费看久久精品| 日韩三级伦理片妻子的秘密按摩| 欧美人妇做爰xxxⅹ性高电影| 在线国产亚洲欧美| 欧美性生活一区| 欧美三级资源在线| 欧美女孩性生活视频| 欧美日韩国产a| 这里是久久伊人| 精品国产乱码久久久久久夜甘婷婷 | 91精品国产综合久久久久久| 欧美日韩精品一区二区三区蜜桃| 日本久久一区二区三区| 欧美主播一区二区三区| 欧美色图片你懂的| 欧美一区二区在线播放| 日韩一区二区免费在线观看| 在线电影一区二区三区| 日韩视频免费直播| 国产婷婷精品av在线| 国产精品久久久久久久裸模| **欧美大码日韩| 亚洲国产欧美日韩另类综合| 日韩国产欧美一区二区三区| 久久精品国内一区二区三区| 国产精品888| 色老综合老女人久久久| 欧美军同video69gay| 精品国产污网站| 一区在线观看免费| 性做久久久久久久久| 久久久久国色av免费看影院| 国产精品传媒视频| 亚洲成a人在线观看| 狠狠色狠狠色合久久伊人| 成人av午夜影院| 欧美精品乱码久久久久久| 精品三级av在线| 亚洲成人中文在线| 激情文学综合插| 91亚洲国产成人精品一区二三| 欧美日韩亚洲综合| 久久精品视频一区二区三区| 亚洲小说春色综合另类电影| 久久97超碰国产精品超碰| 成人午夜精品一区二区三区| 欧美少妇xxx| 国产欧美视频一区二区| 婷婷中文字幕一区三区| 国产精品小仙女| 欧美午夜宅男影院| 成人h精品动漫一区二区三区| 欧美日韩国产另类一区| 国产精品剧情在线亚洲| 免费的国产精品| 91免费在线看| 日本一区二区视频在线| 日韩综合在线视频| 色婷婷精品久久二区二区蜜臀av | 欧美视频一区二区| 中文字幕日韩欧美一区二区三区| 日韩福利电影在线| 97久久超碰国产精品电影| 欧美成va人片在线观看| 亚洲444eee在线观看| 中文字幕综合网| 久久99久久99| 欧美性猛交xxxxxx富婆| 中文字幕一区二区5566日韩| 久久电影网电视剧免费观看| 欧美日精品一区视频| 国产精品天美传媒沈樵| 精品系列免费在线观看| 欧美日产在线观看| 亚洲一线二线三线久久久| 99re这里只有精品首页| 国产精品久久午夜| 成人深夜在线观看| 国产亚洲污的网站| 国产真实乱偷精品视频免| 精品剧情在线观看| 老汉av免费一区二区三区| 欧美电影影音先锋| 午夜亚洲福利老司机| 欧美午夜精品免费| 日韩欧美成人一区二区| 日本免费新一区视频| 欧美丰满美乳xxx高潮www| 图片区小说区区亚洲影院| 欧美人成免费网站| 美女脱光内衣内裤视频久久影院| 欧美高清一级片在线|