Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] verilog程式問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-12-20 13:03:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我想請問一下& P" X' r9 \: [. b7 u
我想寫一個 輸入72個值 暫存起來 之後取5個最大值輸出
3 A  F3 h: X7 K  \8 a0 r$ F其餘的就丟掉,之後再輸入薪的72個值 再取5個最大值這樣,& \3 e- e. A  s( t$ W4 g
就這樣一直做 請問我該如何寫才會有這些動作呢???
4 l5 u3 y& G4 ]  {* I/ V我只會把值暫存起來,但是接下來如何取出72值當中5個最大值) z; \8 L- _3 z8 W
我就不會了,請各位大大給個大概的方向,像是需要用到什麼指令等等的
8 l4 s7 J* Z: S' j4 V, L6 k謝謝各位了
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2007-12-20 15:31:44 | 只看該作者
比較器.....8 V. i- M- B  J9 J$ f0 }' y" f, A# ]! \
有library可以用...
& i  B: ?1 ]5 k, I8 R. R不過你可能要考慮速度的問題....
3#
發表於 2007-12-20 18:56:04 | 只看該作者
您好% C1 i% E" O" C5 I
應該可以參考各種排序的演算法0 r& W- h" O9 X8 b+ J) c
理解演算法後,在想辦法寫code去實現
4#
發表於 2007-12-21 10:18:38 | 只看該作者
Verilog is a circuit function implement language , not an program function implement language.2 k! Y6 E% A/ {1 p; [
You must know the algorithm first , and do the architecture design , then implement with the verilog.
5#
 樓主| 發表於 2007-12-21 14:01:22 | 只看該作者
我現在打了此程式,但是動作不一樣
* y- J8 m" s# O$ H/ K- X1 H0 h/ ^3 y可以告訴我要怎麼改他的data_out動作嗎??
: I( g6 H  J3 W7 hmodule abcd(Data_out, stack_empty, stack_full, Data_in, write_to_stack, read_from_stack, clk, rst);
$ b1 j8 I  o' j6 L; nparameter stack_width = 4;' A( |5 A* E% O# k7 n
parameter stack_height = 8;
, n0 C2 Q' b1 J5 t0 c. z* {parameter stack_ptr_width = 3;1 R3 Q7 G3 Q, T) v
output [stack_width -1: 0] Data_out;
% ]; Z9 }( r  G: }. G- K& Z# Woutput stack_empty, stack_full;
" M6 R# m5 q4 Vinput [stack_width -1: 0] Data_in;, h* Q/ ?: G; K$ Q$ B9 [1 P
input clk, rst;
. r* l# Y" e2 G0 R; T; Ninput write_to_stack, read_from_stack;
( i: }5 h; p: I* R
* B% |1 o- W0 f6 c; n7 E0 Hreg [stack_ptr_width -1: 0] read_ptr, write_ptr;" F. ]% M9 R+ c( p& v; q+ I( Q
reg [stack_ptr_width : 0] ptr_diff;
* I4 @5 w& w4 z" g  K  L2 K. M( Z. s+ G
reg [stack_width -1: 0] Data_out;$ S5 T1 |# `  A6 F+ Z6 I) }
reg [stack_width -1: 0] stack [stack_height -1 : 0];# a. V2 ?; Q1 r- b) x  @* ~; I

* X0 U! P( }: W& \! t3 @assign stack_empty = (ptr_diff == 0) ? 1'b1 : 1'b0;
' a0 q% A& N. R9 `/ y6 D' `+ Fassign stack_full = (ptr_diff == stack_height) ? 1'b1: 1'b0;
6 s+ O% l, x& ^, ?9 Q; T7 Z
7 y, T7 c2 ~) i; aalways@(posedge clk or posedge rst)begin:data_transfer7 n0 B( w4 E9 E
if (rst)begin
( A3 u8 v; r1 v1 H# I& m. F% v Data_out <= 0;
1 V* s6 x# u. ]& T. L9 H5 I7 f+ L read_ptr <= 0;
9 q9 ^2 L" n$ Q  W! K  U& | write_ptr <= 0;. l! O2 {. D$ l/ K8 T
ptr_diff <= 0;& A0 O: M" L+ ?# |
end* |5 }3 D/ K# O9 w# N: r
else begin
, W5 t; ~" R( U5 J- h  H2 _ if((read_from_stack)&&(!stack_empty))begin) ~/ T/ w( x0 d7 T! z/ L; U% B- J
  Data_out <= stack [read_ptr];
# o+ v  c$ _6 R9 w' Z+ \9 a  read_ptr <= read_ptr +1;
' L8 I# @4 Z8 g( U4 F% o  ptr_diff <= ptr_diff -1;1 v# b6 d6 |9 F' t
end- G% x4 z+ K# K& H
else if((write_to_stack)&&(!stack_full))begin) Y5 z! `) |( J; t
  stack [write_ptr] <= Data_in;
4 _, q& v* Q5 o6 U  write_ptr <= write_ptr + 1;
: n0 y, ]2 P( L7 S  ptr_diff <= ptr_diff + 1;
9 ]. J) P3 M! e  end
- @& A& |5 y, [9 U' C end
: b$ R- r/ I- Q4 |( r' K/ z6 Xend
/ @" q7 `7 @/ _" g# @. hendmodule
6#
發表於 2007-12-21 17:10:38 | 只看該作者
你期望有什麼動作.....??
, ]9 B4 E/ O( {4 l7 R/ f應該要說...你知道現在的code是什麼動作嗎...
7#
 樓主| 發表於 2007-12-22 14:24:25 | 只看該作者
我這個code我應該是(因為我不確定sry)
, G0 J% R# s  e! g. H. a' T" \他把數值堆疊在暫存器裡,然後一個值一個值輸出(是這樣嗎??)6 U' W9 U2 Q. V$ O9 Y7 ?
而我要的是 堆疊在暫存器的值,挑5個最大值輸出 其他丟掉這樣
# p. \4 ^  F) [5 r我覺得現再先請各位大大指導我 如何挑一個最大值輸出就好(因為我連1個都不知道如何挑5個呢)
/ Z8 @/ R( i6 q3 c) i所以我想先一步一步來 知道的請指導我一下 謝謝
8#
發表於 2007-12-22 20:49:26 | 只看該作者
您好) t2 W9 [# A& Q, K! S( z. s
請問你有去了解排序法嗎" W# F/ v3 K! f5 K+ {
以泡沫排序法為例n筆資料
$ @# I2 ~1 H9 J! m* d$ e做n-1次比較就得到最大值
9#
發表於 2007-12-24 16:58:01 | 只看該作者
原帖由 posendoh 於 2007-12-22 02:24 PM 發表 # H. ]9 @/ [! W. ?) n' A
我這個code我應該是(因為我不確定sry)
0 \" C% A/ `, I& i4 e2 z他把數值堆疊在暫存器裡,然後一個值一個值輸出(是這樣嗎??)
6 b3 p# d  H1 z而我要的是 堆疊在暫存器的值,挑5個最大值輸出 其他丟掉這樣
5 a* W: w0 T3 p+ E7 }1 E* {' N# p我覺得現再先請各位大大指導我 如何挑一個最大值輸出 ...
4 ]0 p8 v4 q! B, t
* P# I+ k" J: y# i5 H
我覺得還是不要用stack的方法會比較好..6 k& O" y3 q+ I5 w8 f. {
因為你一次要挑5個值,- B& E) ^1 ~1 w% ~6 a+ e
只要你一比完一個最大值,你的stack就會被清空了..' X0 u2 C% {" J5 N
還是放到ram裡面比較實在.
: x* K. q0 i3 Z" ]# {0 S: d0 B# t0 O& d8 a- I
如何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 09:23 AM , Processed in 0.178010 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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