|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
高手幫我分析下,我的秒表程序問題出在哪 |
| 作者:wangyibo 欄目:EDA技術(shù) |
以下是我的秒表程序,就只有秒和分,動(dòng)態(tài)顯示4個(gè)數(shù)碼管(秒和分)就這么簡(jiǎn)單. MODULE led_top_test( clk, rst_n, seg ); input clk; input rst_n; OUTPUT [11:0] seg; led_top led_top_inst( .clk (clk), .rst_n (rst_n), // .data (16'h1234), .dot (4'b0000), .seg (seg) ); endMODULE MODULE led_top( clk, rst_n, // data, dot, seg ); input clk; input rst_n; // input [15:0] data; input [3:0] dot; OUTPUT [11:0] seg; wire [6:0] led; wire [4:0] segcode; wire [3:0] hex; wire [15:0] TEMP; min_sec min_sec_inst( .clk ( clk ), .rst_n ( rst_n ), .data (TEMP) ); led_dynamic_hex dynamic_hex_inst( .hex ( hex ), .segcode( segcode ), .clk ( clk ), .rst_n ( rst_n ), .dat ( TEMP ), .dot ( dot ) ); led_hex2led_common_cathode hex2led_inst ( .hex ( hex ), .led ( led ) ) ; led_out ledout_inst( .seg ( seg ), .led ( led ), .segcode( segcode) ); endMODULE MODULE led_dynamic_hex( hex, segcode, clk, rst_n, dat, dot ); OUTPUT reg[3:0] hex; OUTPUT reg[4:0] segcode; input clk; input rst_n; input [15:0] dat; input [3:0] dot; reg[29:0] cnt; always @ (posedge clk or negedge rst_n) if(!rst_n) cnt<=30'd0; else cnt<=cnt+1'b1; always @ (cnt[19:18]) case(cnt[19:18]) 2'b00: begin hex =dat[15:12]; segcode ={4'b0111,dot[3]}; end 2'b01: begin hex =dat[11:8]; segcode ={4'B1011,dot[2]}; end 2'b10: begin hex =dat[7:4]; segcode ={4'B1101,dot[1]}; end 2'b11: begin & |
| 2樓: | >>參與討論 |
| 作者: wangyibo 于 2006/3/14 14:37:00 發(fā)布:
為什么沒人理我啊,難到就沒人能解決嗎 |
|
| 3樓: | >>參與討論 |
| 作者: 吳明詩 于 2006/3/14 14:52:00 發(fā)布:
你用的是ise吧? 別的不知道,不過always @ (cnt[22]) begin if(sec == 8'h59) begin sec <= 0; min <= min+1'b1; if(min == 8'h60) min <= 0; else if(min[3:0]==8'h10) begin min[3:0]<=0; min[7:4]<=min+1'b1; end end else if(sec[3:0]==8'h9) begin sec[7:4] <= sec[7:4]+1'b1; sec[3:0] <= 0; end else sec <= sec+1'b1; end 由問題,我覺得應(yīng)該是always@(cnt or min or sec)還有別的地方,也有這種情況。 好像是你前面的步驟有沒完成的,所以ncd這一步出錯(cuò)了 |
|
| 4樓: | >>參與討論 |
| 作者: wangyibo 于 2006/3/14 15:16:00 發(fā)布:
應(yīng)該不是吧,會(huì)不會(huì)是模塊間的結(jié)構(gòu), 會(huì)不會(huì)是模塊間的連接和模塊之間的變量之間的問題 |
|
| 5樓: | >>參與討論 |
| 作者: wangyibo 于 2006/3/14 16:05:00 發(fā)布:
問題出現(xiàn)在這 我把秒分計(jì)時(shí)模塊改為下面的 always @ (cnt[22]) if(sec == 8'h59) begin sec <= 0; minclk <=1; end else begin if(sec[3:0]==4'B1001) begin sec[3:0] <= 4'b0000; sec[7:4] <= sec[7:4] + 1'b1; end else begin sec[3:0] <= sec[3:0] + 1'b1; minclk <= 0; end end always @(posedge minclk) if(min == 8'h59) min <= 0; else begin if(min[3:0]==4'B1001) begin min[3:0] <= 0; min[7:4] <= min[7:4] + 1'b1; end else min[3:0] <= min[3:0] + 1'b1; end 現(xiàn)在問題出現(xiàn)在: if(min[3:0]==4'B1001) begin min[3:0] <= 0; min[7:4] <= min[7:4] + 1'b1; end else min[3:0] <= min[3:0] + 1'b1; 這段里面,只要去掉 begin min[3:0] <= 0; min[7:4] <= min[7:4] + 1'b1; end 或者去掉 else min[3:0] <= min[3:0] + 1'b1; 都可以MAP, 都加在一起就不能MAP,就不知道為什么, |
|
| 6樓: | >>參與討論 |
| 作者: 吳明詩 于 2006/3/14 19:07:00 發(fā)布:
我覺得還是我說的那個(gè)地方。 你沒看編譯報(bào)告么? 你改成always@(posedge cnt[22])試試先 |
|
| 7樓: | >>參與討論 |
| 作者: wangyibo 于 2006/3/14 21:58:00 發(fā)布:
吳明詩 謝謝你的關(guān)注 謝謝你的關(guān)注,我搞頂了,也不是那個(gè)問題,我回家電腦上就可以了,不知道是為什么 |
|
| 8樓: | >>參與討論 |
| 作者: wangyibo 于 2006/3/14 22:18:00 發(fā)布:
to 吳明詩 謝謝了, 還真是你說的,換電腦其實(shí)也沒改變,還是你說的那個(gè) 改成always@(posedge cnt[22])就可以了, 謝謝了,以后希望多指教.謝謝! |
|
| 9樓: | >>參與討論 |
| 作者: 吳明詩 于 2006/3/15 11:38:00 發(fā)布:
說實(shí)在的,如果對(duì)功能沒理解的話,即使通過了,功能不一定實(shí)現(xiàn)。 希望您能再仔細(xì)看看程序 |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |