Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 5351|回復: 9
打印 上一主題 下一主題

[問題求助] verilog程式問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-12-20 13:03:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我想請問一下% E" u0 Q" H4 f( d3 i7 L
我想寫一個 輸入72個值 暫存起來 之後取5個最大值輸出7 t9 W2 i' e6 ^, m% X
其餘的就丟掉,之後再輸入薪的72個值 再取5個最大值這樣,0 @$ |# o2 @: h8 z" n$ _/ D
就這樣一直做 請問我該如何寫才會有這些動作呢???. D/ C- q; y4 S$ `( c% W
我只會把值暫存起來,但是接下來如何取出72值當中5個最大值. |3 ]# X$ ~! O6 U2 d( q
我就不會了,請各位大大給個大概的方向,像是需要用到什麼指令等等的
- T' l0 S0 m  @謝謝各位了
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2007-12-20 15:31:44 | 只看該作者
比較器.....- x' [) C# ]/ O: T+ }) Z- E6 z! j, S
有library可以用...2 V) H* T  n, i. @/ W: b( y: t
不過你可能要考慮速度的問題....
3#
發表於 2007-12-20 18:56:04 | 只看該作者
您好
$ Q0 n* H- J# V. I+ |  T應該可以參考各種排序的演算法
. C( k. ]! g+ [理解演算法後,在想辦法寫code去實現
4#
發表於 2007-12-21 10:18:38 | 只看該作者
Verilog is a circuit function implement language , not an program function implement language.
* O5 n" Z/ W5 W0 k1 RYou must know the algorithm first , and do the architecture design , then implement with the verilog.
5#
 樓主| 發表於 2007-12-21 14:01:22 | 只看該作者
我現在打了此程式,但是動作不一樣
1 s0 }5 r3 }9 Y6 p5 I7 Y可以告訴我要怎麼改他的data_out動作嗎??) j1 z+ _5 P% L
module abcd(Data_out, stack_empty, stack_full, Data_in, write_to_stack, read_from_stack, clk, rst);1 F+ ^* P* ^. }2 ?) h6 H$ V4 T
parameter stack_width = 4;
  E) \# f  C1 Mparameter stack_height = 8;3 O4 ^4 P6 C# p& n# D6 w1 Q8 Q  ^% [* b
parameter stack_ptr_width = 3;
3 U- p0 H1 @! s# G2 E# C. Uoutput [stack_width -1: 0] Data_out;: p; q5 f! p3 }/ v
output stack_empty, stack_full;9 k: w4 r4 Q2 p- F, N
input [stack_width -1: 0] Data_in;8 P) ~7 r, N% Q' }' H
input clk, rst;( O0 c* ?( m1 T3 |) \# s) o* f! V) R
input write_to_stack, read_from_stack;( i$ ]9 K' T% g
' n3 `% z' c& ^% a
reg [stack_ptr_width -1: 0] read_ptr, write_ptr;& G7 q" E3 a. G% p+ J( j
reg [stack_ptr_width : 0] ptr_diff;2 \" I7 ]& ~6 r% y7 c' z- [$ a
4 O" t+ h2 q' T6 k4 v
reg [stack_width -1: 0] Data_out;
/ N2 g$ x: @; T. O8 }: n' n  lreg [stack_width -1: 0] stack [stack_height -1 : 0];( k' {1 j) T9 F* G$ A) a/ n

3 m/ h6 Y7 F. y! Kassign stack_empty = (ptr_diff == 0) ? 1'b1 : 1'b0;4 n+ N1 @3 e8 @/ W
assign stack_full = (ptr_diff == stack_height) ? 1'b1: 1'b0;
+ c- }% }; `& R( d; _1 i1 ^1 q- F# ^( r1 O% @
always@(posedge clk or posedge rst)begin:data_transfer
: N$ h, X2 c" \7 V& I% M, Pif (rst)begin
- w4 A9 w+ m1 o+ L: c; i Data_out <= 0;5 }1 u5 B9 }  ^; j, U$ v
read_ptr <= 0;7 v8 S2 n7 F* P' a0 t) [8 A/ E5 r
write_ptr <= 0;9 I- S5 ]: V. v$ D8 f
ptr_diff <= 0;
" b  ^! Y3 ^# }0 M, vend" s2 @4 \1 ?# J8 M) W, b( t# @
else begin
* [1 J- e: `: Y if((read_from_stack)&&(!stack_empty))begin6 R( B5 i. I- w
  Data_out <= stack [read_ptr];
8 E! W6 K4 c8 B9 j3 b9 B0 I$ V! Q  read_ptr <= read_ptr +1;" y8 J7 X% G1 v% z
  ptr_diff <= ptr_diff -1;
/ c% E& x. ?; o end  |' x# w5 G) ?3 P
else if((write_to_stack)&&(!stack_full))begin
+ ]$ @$ Y- L2 V! L( D  stack [write_ptr] <= Data_in;
7 W0 u( Z6 b  ]6 M  Q3 p3 i/ V  write_ptr <= write_ptr + 1;( b7 a( o' v. @8 ?1 w1 s4 {
  ptr_diff <= ptr_diff + 1;( E) D8 z' L& l9 z2 Q8 l  X& V1 L
  end
( R$ e! C7 q7 Y. c end4 A; i, W  {- r' n9 @/ K3 e
end3 a  y3 U/ {6 b! [1 L
endmodule
6#
發表於 2007-12-21 17:10:38 | 只看該作者
你期望有什麼動作.....??! l+ p; o5 |) \6 N2 k) G
應該要說...你知道現在的code是什麼動作嗎...
7#
 樓主| 發表於 2007-12-22 14:24:25 | 只看該作者
我這個code我應該是(因為我不確定sry)
! v9 V* R7 L" m( x他把數值堆疊在暫存器裡,然後一個值一個值輸出(是這樣嗎??)
3 I! T0 e( G, B  D2 u. p4 e0 A* |而我要的是 堆疊在暫存器的值,挑5個最大值輸出 其他丟掉這樣$ s- q) ?6 n1 R) v0 j% M
我覺得現再先請各位大大指導我 如何挑一個最大值輸出就好(因為我連1個都不知道如何挑5個呢)
' g* P( g0 W, r) t, U1 R% W- G3 C所以我想先一步一步來 知道的請指導我一下 謝謝
8#
發表於 2007-12-22 20:49:26 | 只看該作者
您好3 M; A: N6 _# r. c- Q- W  e2 |6 q  }8 Z
請問你有去了解排序法嗎+ @& `! R: j3 r7 `
以泡沫排序法為例n筆資料; j2 C, Q$ ^7 R" }$ _
做n-1次比較就得到最大值
9#
發表於 2007-12-24 16:58:01 | 只看該作者
原帖由 posendoh 於 2007-12-22 02:24 PM 發表
- S; N' A! z! ~( q8 M. R我這個code我應該是(因為我不確定sry)* `2 N2 M% J% ^" ^, [4 a9 P: R
他把數值堆疊在暫存器裡,然後一個值一個值輸出(是這樣嗎??)
2 x; `  o3 i* g  h1 R5 f而我要的是 堆疊在暫存器的值,挑5個最大值輸出 其他丟掉這樣
$ F# ]& C$ }& B' t/ b5 m! a4 N我覺得現再先請各位大大指導我 如何挑一個最大值輸出 ...

0 h+ ^' R7 v  W
6 d8 W7 X. n$ X3 Y6 y) h我覺得還是不要用stack的方法會比較好..% ?+ D$ [' U3 q: F- F
因為你一次要挑5個值,: _0 D7 i$ R" r7 W9 i2 P
只要你一比完一個最大值,你的stack就會被清空了..% v* @# U% w) o$ D  z4 M
還是放到ram裡面比較實在.0 u( J5 Y+ ^5 F( [
6 L: r+ X- f- E- q, I* O' A
如何access ram,請參考你要用的chip user manual

評分

參與人數 1Chipcoin +3 收起 理由
masonchung + 3 感謝經驗分享!

查看全部評分

10#
發表於 2007-12-25 03:42:59 | 只看該作者

回復 1# 的帖子

我覺得你應該使用一個可以存放六個值的buffer。並且在reset時,填滿最小的數值。接著對於每一個新加入的資料,將他放在第六個的位置,接著對這六個資料進行進行bubble sort的比較。 當你所有的資料,經過這個提供bubble sort模組後,存在於buffer內的頭五個資料就是你要的輸出了。講起來是容易,不過寫起來倒還是有點複雜就是了,尤其是這個bubble sort的部份。

評分

參與人數 1Chipcoin +3 收起 理由
masonchung + 3 言之有物!

查看全部評分

您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-9-28 05:08 AM , Processed in 0.180011 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表