久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6264|回復: 1
打印 上一主題 下一主題
收起左側

EDA設計數字頻率計(Verilog源程序)

[復制鏈接]
跳轉到指定樓層
樓主
最近在做數電研究,題目為數字頻率計,要求用FPGA板子設計,為了能使51黑電子論壇能發展的更好,我也貢獻我的一份力量,希望能幫到各位。

原理:測量1s時間內待測脈沖個數從而得出待測信號的頻率。
具體模塊:
基準信號產生模塊:把50MHz分頻成1Hz

控制模塊:產生計數使能信號;產生清零信號;
計數模塊:通過從控制模塊輸入進來的使能信號和清零信號能從0000~1001計數(8421碼),并能產生進位;
鎖存模塊:把計數結果鎖存;使顯示模塊能穩定顯示結果
顯示模塊:通過數碼管顯示,位選是用的外部電路138譯碼器,段選是一個四位二進制碼(8421碼)
待測信號:由于本人沒有函數信號發生器所以就把50MHz分成900Hz作為待測信號來驗證該系統能否正確測量,也可以把該模塊刪掉,把輸出口接一個input,就可以測量外部信號了,

由于板子資源有限,而我的程序有點復雜,不是很簡潔,所以只能顯示四位結果,即量程為0~9999Hz。板子上有8位數碼管,理論上可以顯示8位結果,即量程為0~99999999Hz。另外我準備用modelsim仿真各個模塊,在我仿真完控制模塊后遇到了問題,其他幾個模塊仿真不出來,只有控制模塊可以仿真,其他幾個寫了激勵信號,而且都賦了初值,但是輸出結果一直是高阻態(顯示紅線),希望各位朋友能教教我(本人不怎么會用modelsim)

源程序:
  1. //控制模塊
  2. module fre_ctrl(clk,rst,count_en,count_clr,load);
  3. input clk,rst;
  4. output count_en,count_clr,load;
  5. reg count_en=0;
  6. reg load=0;
  7. always@(posedge clk)
  8.         begin if(rst)begin count_en<=0;load<=1;end
  9.         else begin count_en<=~count_en;
  10.                                 load<=count_en;
  11.                   end
  12.         end
  13.         assign count_clr=(~clk)&load;
  14.         endmodule


  15. //計數模塊
  16. module count10(out,cout,en,clr,clk);
  17. input en,clr,clk;
  18. output[3:0] out;
  19. output cout;
  20. reg[3:0] out;
  21. always @(negedge clk or posedge clr)
  22. begin if(clr) out<=0;//計數清零
  23. else if(en)
  24. begin if(out==9)
  25.                 out=0;
  26. else out<=out+1;//計數
  27. end
  28. end
  29. assign cout=((out==9)&en)?1:0;
  30. endmodule

  31. //鎖存模塊
  32. module latch_16(qo,din,load);
  33. input load;
  34. input[15:0] din;
  35. output [15:0] qo;
  36. reg[15:0] qo;
  37. always @(posedge load)
  38. begin qo=din;end
  39. endmodule

  40. //1Hz基準信號產生模塊(該模塊是我在網上找的,可以把50MHz分成任意小于50M的頻率)
  41. module div_N(
  42. input CLK,// 基準時鐘
  43. output CLK_div_N// N分頻后得到的時鐘
  44. );
  45. wire[31:0]N=50000000;// N為分頻系數,N≥2即可,N的值為CLK除以CLK_div_N后取整(四舍五入)
  46. /******************** 產生備用時鐘1 ***************/
  47. reg[31:0]cnt1;
  48. reg CLK_div_N_1;
  49. always @ (posedge CLK)
  50. begin
  51. if(N%2==0)// 如果N為偶數
  52. begin
  53. if(N==2)// 如果N為2
  54. CLK_div_N_1 <= ~CLK_div_N_1;
  55. else
  56. begin
  57. if(cnt1==(N-2)/2)
  58. begin
  59. cnt1 <= 0;
  60. CLK_div_N_1 <= ~CLK_div_N_1;
  61. end
  62. else
  63. cnt1 <= cnt1+1;
  64. end
  65. end
  66. else// 如果N為奇數
  67. begin
  68. if(cnt1==N-1)
  69. cnt1 <= 0;
  70. else
  71. cnt1 <= cnt1+1;
  72. if((cnt1==N-1) || (cnt1==(N-1)/2))
  73. CLK_div_N_1 <= ~CLK_div_N_1;
  74. else ;
  75. end
  76. end
  77. /*********************** 產生備用時鐘2 *********************/
  78. wire CLK0=(N%2)? (~CLK):0;// 如果N為偶數,備用時鐘2(CLK_div_N_2)恒為0,即不需要用到此備用時鐘
  79. reg[31:0]cnt2;
  80. reg CLK_div_N_2;
  81. always @ (posedge CLK0)
  82. begin
  83. if(cnt2==N-1)
  84. cnt2 <= 0;
  85. else
  86. cnt2 <= cnt2+1;
  87. if((cnt2==N-1) || (cnt2==(N-1)/2))
  88. CLK_div_N_2 <= ~CLK_div_N_2;
  89. end
  90. /******************** 產生最終分頻時鐘************************/
  91. assign CLK_div_N = CLK_div_N_1 | CLK_div_N_2;
  92. endmodule

  93. //待測信號(本人設置的輸出900Hz)
  94. module square(nrst,clk_in,clk_out);
  95. input wire nrst;
  96. input wire clk_in;
  97. output reg clk_out;
  98. reg [18:0]r_cnt;

  99. always @(posedge clk_in)
  100. if(nrst)
  101. begin
  102. if(r_cnt < 19'd27776)
  103. r_cnt <= r_cnt+1'b1;
  104. else begin
  105. r_cnt <= 19'b0;
  106. clk_out <= ~clk_out;
  107. end
  108. end
  109. else begin
  110. r_cnt <= 19'b0;
  111. clk_out <= 1'b0;
  112. end
  113. endmodule

  114. //數碼管顯示模塊
  115. module SMG(qo,clk,rst,se,sel);
  116. input wire clk,rst;
  117. input[15:0]qo;
  118. output reg [7:0]se;
  119. output reg [2:0]sel;
  120. reg [3:0]ge;
  121. reg [3:0]shi;
  122. reg [3:0]bai;
  123. reg [3:0]qian;
  124. reg [7:0]b;
  125. reg c;
  126. reg [25:0]q;
  127. reg [3:0]a;
  128. always@(posedge clk or negedge rst)
  129. begin

  130. if(rst==0)
  131. begin
  132. q<=0;
  133. c<=0;
  134. end
  135. else if(q==139999)
  136. begin
  137. q<=0;
  138. c<=~c;
  139. end
  140. else
  141. q<=q+1;
  142. end

  143. always@(posedge c)
  144. begin
  145.     if(a==3)
  146.     a<=0;
  147.     else
  148.     a<=a+1;
  149. end

  150. always@(*)
  151. begin
  152. case(a)
  153. 0:begin
  154. sel=3'b011;
  155. qian={qo[15],qo[14],qo[13],qo[12]};b=ge;
  156. end
  157. 1:begin
  158. sel=3'b010;
  159. bai={qo[11],qo[10],qo[9],qo[8]};b=shi;
  160. end
  161. 2:begin
  162. sel=3'b001;
  163. shi={qo[7],qo[6],qo[5],qo[4]};b=bai;
  164. end
  165. 3:begin
  166. sel=3'b000;
  167. ge={qo[3],qo[2],qo[1],qo[0]};b=qian;
  168. end
  169. default sel=3'b011;
  170. endcase
  171. end

  172. always@(posedge clk)
  173. begin
  174. case(b)
  175. 4'b0000:se=8'b0011_1111;//0
  176. 4'b0001:se=8'b0000_0110;//1
  177. 4'b0010:se=8'b0101_1011;//2
  178. 4'b0011:se=8'b0100_1111;//3
  179. 4'b0100:se=8'b0110_0110;//4
  180. 4'b0101:se=8'b0110_1101;//5
  181. 4'b0110:se=8'b0111_1101;//6
  182. 4'b0111:se=8'b0000_0111;//7
  183. 4'b1000:se=8'b0111_1111;//8
  184. 4'b1001:se=8'b0110_1111;//9
  185. endcase
  186. end

  187. endmodule
復制代碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1045091 發表于 2022-9-18 13:11 | 只看該作者
有測試文件嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: а天堂中文最新一区二区三区 | 日韩在线不卡视频 | 日韩久久网 | 99综合| caoporn免费在线视频 | 午夜精品在线观看 | 色性av| 中文字幕亚洲欧美日韩在线不卡 | 黄色一级电影免费观看 | 亚洲电影免费 | 精品久久久一区 | 日韩中文字幕一区二区三区 | 亚洲日韩欧美一区二区在线 | www.日本三级 | 中文字幕日韩在线观看 | 成人在线一区二区三区 | 91高清视频| 国产综合网站 | 精品欧美一区二区在线观看欧美熟 | 国产网站在线免费观看 | 国产乱码精品1区2区3区 | 日韩电影一区 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 久久福利网站 | 韩国av电影网 | 久久久精品视频免费看 | 亚洲精品久久久一区二区三区 | 亚洲一区不卡在线 | 在线观看黄免费 | 国产精品久久久久久中文字 | 91精品久久久久久久久中文字幕 | 久久激情视频 | 国产精品福利一区二区三区 | 国产一级特黄真人毛片 | 伊人久麻豆社区 | 中文字幕亚洲精品 | 亚洲激情网站 | 国产精品一区二区免费看 | 欧美国产免费 | 国产日韩精品视频 | 日韩精品一区二区三区中文字幕 |