Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] VHDL转verilog问题

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-12-29 14:16:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
手里面有个VHDL写的FIFO,现在想转换成VERILOG的4 Y3 b7 _" ]1 s0 F# S8 f9 Z- t
原代码如下

  1. 7 m; C$ J% D* c4 x( n& D! D

  2. ! n8 d0 r* v. b
  3. CNT: process(CLR, WR_PTR, RD_PTR): I+ P  [" U# R! v. H/ Z% _: v
  4.   variable change : integer;  / M. u. x: g" M1 l
  5. begin  
    5 M" t- v/ F8 v0 ]+ _
  6.   if CLR = '1' then2 e9 W  M, h) y# v1 V8 o
  7.    count <= 0;
    ' b0 f7 X3 s; W. h% i; J2 o) b
  8.    change := 0;
    ; L6 E* h* X* y( s9 C
  9.   else
    $ Y9 H2 x* l7 L: ~' H; R
  10.    change := 0;3 _; `" j0 p0 M& l) A% r5 i
  11.    if WR_PTR'event then
    ! g2 u/ l5 @( Z  p1 a
  12.     change := 1;
    + n4 x: K- j0 U  `  u/ r
  13.    end if;
    . `7 c2 ^* ^7 r& I" d
  14.    if RD_PTR'event then7 _+ T4 N- y+ K+ Q
  15.     change := change - 1;5 e2 v9 r9 W' n( [
  16.    end if;
    1 N8 E9 `8 h4 c% q: t
  17.    count <= count + change;
    " E+ i8 Q* q/ O6 N3 T% u4 ?7 X, I1 T
  18.   end if;8 k" x, H- F- ?; R5 Q
  19. end process;
複製代碼
不知道改为Verilog该怎么写红色部分。" y& O2 K" G1 B( I4 O* |4 L. ~
我想是用always@( WR_PTR)" Y' \7 j. O  l/ K$ l
但是process(CLR, WR_PTR, RD_PTR)这一句已经用了always了,没办法,刚接触verilog,请大家帮帮忙
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-1-5 12:41:03 | 只看該作者
這個fifo程式有問題喔,沒有clock訊號,很奇怪.
3#
 樓主| 發表於 2009-1-6 16:31:33 | 只看該作者
这个FIFO程式有CLK的,我这里只是一部分代码,没有将所有代码贴出来,只是希望大家告诉我该怎么写if WR_PTR'event then
4#
發表於 2009-1-7 11:42:34 | 只看該作者
1. VHDL clock 語法好像不太對,應該是 if WR_PTR'event and WR_PRT='1' then5 z5 i- ~( e7 l- r
2. count 沒有clock!你可能需要把全部貼出來,看是不是漏掉了?1 H) O# k3 ~9 P  G1 ^% e% F
3. 一個process有兩個clock,一般不會這樣寫的。
5#
 樓主| 發表於 2009-1-10 22:11:05 | 只看該作者
  1. ------------------------------------------------------------------------------------
    4 M( l$ d% s- r& H5 o- X8 F
  2. library IEEE;& E- T2 Z. ]. `$ I
  3. use IEEE.std_logic_1164.all;
    " X" t$ Q- H) C7 _  Q# J7 \
  4. entity fifo is) w6 W- a7 A5 [* p0 K
  5.         generic (
    : h, t1 i# W  Y& k- b. \. T
  6.                 depth : positive := 16' U7 J3 w' I  I; l
  7.                 );       
    . F' q1 N2 Q, H$ h* N
  8.         port(
    3 u* X' U6 q: |" r+ z
  9.                 CLR   : in  std_logic;1 {# t) b5 H4 G4 Z
  10.                 WCLK  : in  std_logic;9 ]3 t- u& t) C9 @5 `, r9 a* a# B
  11.                 WE    : in  std_logic;. ^' P  a3 T' I4 U( T# F+ o0 {9 j
  12.                 RCLK  : in  std_logic;
    1 m7 ?$ o  ?* X, i  A
  13.                 RE    : in  std_logic;3 e3 ~" Y3 U% s4 R; [
  14.                 DATA  : in  std_logic_vector(7 downto 0);
    7 o* x6 e: B) E2 b* W. C; z* v
  15.                 EMPTY : out std_logic;
    6 r9 [# s8 b+ W0 H3 D8 _
  16.                 FULL  : out std_logic;/ X8 V6 m# Y2 q& G" M
  17.                 Q     : out std_logic_vector(7 downto 0)
    - H: d! Z$ A+ t1 m  d
  18.         );
    ; L7 A7 V8 h- g  A7 ?- h0 q
  19. end entity;
      C6 y7 `  d$ W5 y4 x( t
  20. library IEEE;
    8 E, o! L) i) _& W+ ~$ v5 }
  21. use IEEE.std_logic_unsigned.all;
    2 W) ]5 \# z5 K6 j( S; {' e0 |
  22. architecture behavior of fifo is
    * T" D0 g# p: `( Q1 t6 h2 p$ k& d
  23.         constant fmax : positive := depth-1;          g1 ^. F: ]7 g4 J3 \: u; }
  24.         type fifo_array_type is array (fmax downto 0) of std_logic_vector(7 downto 0);. _$ r9 u1 |6 o; }& w7 R3 I3 d
  25.         signal fifo_array : fifo_array_type;  J8 q" O* V: _" ?" L: v) D* F1 Z4 u
  26.         signal WR_PTR : INTEGER range 0 to fmax;
    4 |8 l7 P. T* n0 X6 N1 z
  27.         signal RD_PTR : INTEGER range 0 to fmax;! Y" `/ M9 A' C: u5 _; p, T1 [
  28.         signal count  : INTEGER range 0 to depth;
    & p  M) B# N: D+ z; V4 I& }
  29. begin- O2 ^% p, y) k8 M; d
  30.         CNT: process(CLR, WR_PTR, RD_PTR), ~  R: K" m' T
  31.                 variable change : integer;                  L# w" e; [0 G; A% G( v
  32.         begin  4 P( D* r% s! `/ ?2 C0 f' a8 J' D
  33.                 if CLR = '1' then
    8 p- b/ m+ u7 N
  34.                         count <= 0;/ g  B7 U- t1 v4 `
  35.                         change := 0;
    4 L2 U( z4 s4 r, `
  36.                 else0 X1 `5 r8 K# g1 i! r4 `! m& z
  37.                         change := 0;2 F. q. b7 V, f& u' A8 x
  38.                         if WR_PTR'event then/ v( X- q8 x2 y$ _! l+ e
  39.                                 change := 1;  s) U- c5 i$ j- i7 [5 ~2 ]; G+ [
  40.                         end if;
    / r! D$ l& I- o. |, o6 g1 S- V
  41.                         if RD_PTR'event then
    5 Q. T- b9 s; W2 P& B- J  t$ N  y
  42.                                 change := change - 1;! `1 A4 u% _5 A5 j& M$ b/ s
  43.                         end if;
    ! E! R4 q: F0 P5 M# v
  44.                         count <= count + change;
    - Z! o' z. r  V! j4 z1 z
  45.                 end if;
      L$ R  R; v/ Q- V% ]
  46.         end process;        : {4 t6 L4 e- n, k6 y4 u) P0 ?
  47.         STATUS: process(count)' D6 ~+ k- B" d5 G$ ?" Y' }
  48.         begin  ; p- u  `8 \* m$ U' ]& C" O% b
  49.                 if count=0 then
    $ \4 \+ ]$ g0 o7 e8 D+ p5 p6 J  P
  50.                         FULL   <= '0';
    * Y$ T2 k' y7 e1 G. U0 G2 ]
  51.                         EMPTY  <= '1';
    4 q4 ]: l" S1 t' s, s; E$ I
  52.                 elsif count=depth  then
      m, z; {4 a+ n* U
  53.                         FULL   <= '1';
    ; h7 W% W) h' D8 l. Z' E$ L6 L
  54.                         EMPTY  <= '0'; 5 i; [8 F) A' Y; t+ x9 S$ H
  55.                 else        $ o  }  \+ t+ P# ?$ T" V# a
  56.                         FULL   <= '0';
    - D: Q  t5 ], F2 V. R" y) M
  57.                         EMPTY  <= '0';
    2 p0 l* `6 |7 D1 [  u7 v7 g5 K
  58.                 end if;                        ; B  O- j3 A( Q+ i# C- g* M
  59.         end process;       
複製代碼
6#
 樓主| 發表於 2009-1-10 22:13:00 | 只看該作者
  1.         FWRITE: process (CLR, WCLK)  A- r8 B8 R% T7 y6 b2 n
  2.         begin- H% m( w* i5 U0 `
  3.                 if CLR = '1' then% Q! s% |6 X3 M# }/ Y5 B
  4.                         for INDEX in fmax downto 0 loop0 E, T4 s9 d8 o/ s8 b
  5.                                 fifo_array(INDEX) <= (others => '0');+ M8 `& n* N4 {& a- a1 _$ {* Z$ Z+ d
  6.                         end loop;
    . G; I0 L+ N, ?+ E: z9 x$ f
  7.                         WR_PTR <= 0;
    7 y, @  V& ]3 p& E" e- R/ A
  8.                 elsif rising_edge(WCLK) then! M, ?1 D- K* R! T
  9.                         if WE = '1' and count<depth then- @' Q; s/ k; }5 n, ]1 L5 T  d
  10.                                 fifo_array(WR_PTR) <= DATA;
    9 |5 a# t# V9 E7 A" F( U8 i" V
  11.                                 -- move pointer3 B4 G( z: O& U: W! A' V) t: F# O& [
  12.                                 if WR_PTR=fmax then : e& D! C; D- X
  13.                                         WR_PTR <= 0; ! p: y+ V& n: C& A5 H. V; g( S
  14.                                 else WR_PTR <= WR_PTR + 1;: z5 Y  i/ j9 B/ j# e" k
  15.                                 end if;
    9 E* Z/ s* G3 D0 K9 e+ e4 V) d
  16.                         end if;
    % f$ {" s1 i* ]. @% A. C
  17.                 end if;
    1 R5 R2 u9 R5 N; H" b% v
  18.         end process;  w! V  [' X" Q% b+ X( n/ T
  19.         FREAD: process (CLR, RCLK)
    ! r- J  T$ A7 w# k" \* |$ P
  20.         begin6 _: Y0 I+ t' }/ C$ @+ Z& P
  21.                 if CLR = '1' then
    , A0 Z- C3 ?, I( b/ L
  22.                         RD_PTR <= 0;& o" r/ D: C! a( \. R3 B
  23.                 elsif falling_edge(RCLK) then/ I* _" I5 E, O2 ]/ n; _
  24.                         if RE = '1' and count>0 then
    + e* @( ^. N( S% n5 i
  25.                                 Q <= fifo_array(RD_PTR);- P2 s2 i+ h- T: J6 R
  26.                                 -- move pointer $ `; n# J! y& t7 a
  27.                                 if RD_PTR=fmax then
    ; ^  C' t. p6 f% [
  28.                                         RD_PTR <= 0;
    ! \8 O6 R; h6 }# `- e& \2 W
  29.                                 else RD_PTR <= RD_PTR + 1;
    % z5 D2 T! O* S+ L& X' t. {+ r
  30.                                 end if;; q7 v8 U/ l9 [4 S
  31.                         end if;! L+ u8 m3 v5 g
  32.                 end if;3 {  C, q5 w0 g' k9 {% ?2 B% h
  33.         end process;' @7 m( p+ q3 g. v
  34. end architecture;
複製代碼
7#
發表於 2009-7-4 00:42:31 | 只看該作者
印象中有个工具可以转vhdl 为 verilog,可以看看,或许有用
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-9 05:17 AM , Processed in 0.141017 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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