Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] VHDL转verilog问题

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-12-29 14:16:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
手里面有个VHDL写的FIFO,现在想转换成VERILOG的
. X& w6 C1 w' g原代码如下

  1. 1 e+ }0 y; \  j6 _

  2. " M- ~4 y" C! S* F4 V/ O8 A0 h8 K/ K( ?
  3. CNT: process(CLR, WR_PTR, RD_PTR)7 {1 M9 }& u+ C- P+ o, m# j$ `
  4.   variable change : integer;  # w/ A, \! W7 U: f4 h; m0 b
  5. begin  
    & r0 F, Z! T8 Y" v; F% }
  6.   if CLR = '1' then
    0 F! ?/ N. g" I# Y& A7 h
  7.    count <= 0;+ [  z7 J/ L$ O$ x0 X# L  X, G7 v
  8.    change := 0;) i0 u- S: s+ S- V4 V  v5 R
  9.   else& |7 w# m! O4 ?$ A3 i; j
  10.    change := 0;6 K/ v  a7 A2 Z3 ]# j3 b6 x
  11.    if WR_PTR'event then8 x, n3 [& p. `- X
  12.     change := 1;
    7 ~4 c4 C7 D4 P! S! t3 x
  13.    end if;
    ! G  l8 Q6 Q1 \5 p
  14.    if RD_PTR'event then7 l4 B& s/ d/ f: w+ j
  15.     change := change - 1;$ f# P' A% ?3 F# G" v
  16.    end if;
    $ \6 E4 A- R) ]1 B; M. D2 w: F1 z
  17.    count <= count + change;7 ^- l6 s. B- \3 g! e$ T
  18.   end if;( m- m; X6 V7 Z% a
  19. end process;
複製代碼
不知道改为Verilog该怎么写红色部分。
8 W: K6 I4 Q  E# b我想是用always@( WR_PTR)  j/ Z# ~/ a  H: ^) b
但是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' then8 d1 J6 }- K$ Y
2. count 沒有clock!你可能需要把全部貼出來,看是不是漏掉了?" d8 e% q. U( {& ~4 a. u- g
3. 一個process有兩個clock,一般不會這樣寫的。
5#
 樓主| 發表於 2009-1-10 22:11:05 | 只看該作者
  1. ------------------------------------------------------------------------------------$ f' n! P/ ^. a: c- A1 D
  2. library IEEE;5 T3 }4 |6 F+ @' e
  3. use IEEE.std_logic_1164.all;
    ! C$ h4 r/ u- J# o
  4. entity fifo is
    ! ?; |* Q) B# _5 r
  5.         generic (- ^3 y; k7 z7 k3 l  @6 S- m
  6.                 depth : positive := 168 o4 t* \* z. ^6 ~: o
  7.                 );        7 @! @+ P5 X3 W( q7 O& S
  8.         port(: n9 P' l2 E6 n* a( b1 h
  9.                 CLR   : in  std_logic;: T9 l) R/ d6 N6 l5 E; R2 A- m
  10.                 WCLK  : in  std_logic;
    + ~4 w; A5 ?! m/ F$ X
  11.                 WE    : in  std_logic;
    $ l, n! M9 M, ?0 u- M
  12.                 RCLK  : in  std_logic;
    + @5 x' D" h: w& T: R& b
  13.                 RE    : in  std_logic;9 k0 f; C9 S% P6 k  h
  14.                 DATA  : in  std_logic_vector(7 downto 0);2 X) o: {: }. {8 w. [6 B+ N
  15.                 EMPTY : out std_logic;- n5 X6 o( O7 ^' o
  16.                 FULL  : out std_logic;3 _( U  ^/ [- _9 H/ I
  17.                 Q     : out std_logic_vector(7 downto 0)9 i6 g9 V7 M" U% S0 l, e/ _6 A- l' u+ k
  18.         );
    1 {. |( C. D* f1 g" Z( n; {! A
  19. end entity;7 p3 x0 `& D& Q; N( {
  20. library IEEE;
    * i# ~% u( k. ~: C) y& w9 I/ C
  21. use IEEE.std_logic_unsigned.all;) V/ C+ |- S' h/ m; a6 ~
  22. architecture behavior of fifo is
    : Z% C* V4 h; m0 H, l- c
  23.         constant fmax : positive := depth-1;       
    8 ]2 A+ q0 C3 c$ ~# f' B# S6 i
  24.         type fifo_array_type is array (fmax downto 0) of std_logic_vector(7 downto 0);
    7 E4 B6 B7 K0 O1 q
  25.         signal fifo_array : fifo_array_type;6 F) o, {: ~4 C- M  S2 O
  26.         signal WR_PTR : INTEGER range 0 to fmax;2 `3 k+ U, x8 I- ~# M
  27.         signal RD_PTR : INTEGER range 0 to fmax;" p$ |9 b" R0 Y
  28.         signal count  : INTEGER range 0 to depth;
    4 N; p7 {' I+ O
  29. begin4 o# V/ @7 N' f
  30.         CNT: process(CLR, WR_PTR, RD_PTR)
    % i7 D" J% ~9 z! Q, p- c
  31.                 variable change : integer;               
      i" J% o% j3 D' |- V. ^# a
  32.         begin  
    ( V; m% g- W. @8 e/ Z  x0 J
  33.                 if CLR = '1' then  i, r) |" i* F8 l
  34.                         count <= 0;
    # G/ u4 U. W0 z) @! y1 l4 w
  35.                         change := 0;4 M' B( V! D2 ^5 @- R9 T9 j6 R
  36.                 else
    $ _1 q" P# V, \4 A* W6 O! }
  37.                         change := 0;
    4 @( @+ O" J: k: I
  38.                         if WR_PTR'event then
    ( [- |! s/ O' |
  39.                                 change := 1;
    . \  M7 ^$ F* t; n9 S2 @
  40.                         end if;. j6 F( N/ n9 @9 A
  41.                         if RD_PTR'event then- G' V6 l- U$ J/ G0 N1 A* x
  42.                                 change := change - 1;" _! O0 B$ ~. k# `9 F
  43.                         end if;  R( y- x/ S* |4 U' n9 G
  44.                         count <= count + change;7 |! ~2 Q4 a. |2 o# ~/ S8 y
  45.                 end if;. M. P" M' i$ l6 y# ]  V
  46.         end process;        ) {! V- Z! i1 n' c2 ~  r' J
  47.         STATUS: process(count)
    ) _* e! x8 P+ h$ O4 [3 v
  48.         begin  
    ' V/ q9 z: E9 c5 u; {# V' x: v- ?0 `
  49.                 if count=0 then
    0 v6 |0 s' n9 r3 x8 ]9 ]. G
  50.                         FULL   <= '0';3 \& m7 i, T6 v
  51.                         EMPTY  <= '1';
    : o( O0 l# W. H; {( O* J1 T) \
  52.                 elsif count=depth  then- L- B2 v( E! H0 U% U
  53.                         FULL   <= '1'; 2 \$ ~, N* F6 ]+ M3 B; z/ V
  54.                         EMPTY  <= '0'; * s$ S; a' j( o# i4 S
  55.                 else       
    ' Z6 r) ?2 {; }, o
  56.                         FULL   <= '0';
    9 S) \, l- A8 l0 J  f
  57.                         EMPTY  <= '0';
    ) g( }; A- W. B# I5 g9 [: J3 w$ E
  58.                 end if;                       
    3 I4 D' x; Q# J' j$ g
  59.         end process;       
複製代碼
6#
 樓主| 發表於 2009-1-10 22:13:00 | 只看該作者
  1.         FWRITE: process (CLR, WCLK); X# B6 i2 L8 n
  2.         begin3 u2 _% u" {1 f
  3.                 if CLR = '1' then
    * g1 D& k3 h8 H1 v9 ?
  4.                         for INDEX in fmax downto 0 loop9 i! \* E, A1 u- U4 R; L
  5.                                 fifo_array(INDEX) <= (others => '0');
    7 h  Z0 {1 n) P1 B% c: y
  6.                         end loop;" y2 L# J- j$ u& i( b
  7.                         WR_PTR <= 0;' U$ O' I2 b: O6 i1 h. }0 T: \/ Y8 \+ c
  8.                 elsif rising_edge(WCLK) then
    ; j, c; b! s- h7 h, C7 }- `5 z
  9.                         if WE = '1' and count<depth then, S7 @0 P& w% j6 Q" a
  10.                                 fifo_array(WR_PTR) <= DATA;' @0 X7 T6 r3 d4 h
  11.                                 -- move pointer
    & S* c& _. V1 X( I- q
  12.                                 if WR_PTR=fmax then # [+ I4 g/ K6 i/ V7 [9 z" t. R
  13.                                         WR_PTR <= 0;
    : F6 I1 R* y# g
  14.                                 else WR_PTR <= WR_PTR + 1;
    : c8 @4 x5 ]( v) n5 u' V
  15.                                 end if;
    & [3 H6 y5 h1 q, }( t* W8 h
  16.                         end if;7 ~5 o0 g# k# G2 z+ p; Z6 |
  17.                 end if;
    & Q& R* J  }- ]" p  R$ `
  18.         end process;. f' g2 \/ P: B8 t+ i
  19.         FREAD: process (CLR, RCLK)
    6 e4 @# @- a+ {' w
  20.         begin. M  u- D/ G$ `2 |* J2 w( y
  21.                 if CLR = '1' then& [; m; b# J( B: H: z4 ]
  22.                         RD_PTR <= 0;, r' g0 Z; v9 b, ^3 C: k& Y7 H
  23.                 elsif falling_edge(RCLK) then( i2 `2 S7 v+ d0 Y, i9 O" O
  24.                         if RE = '1' and count>0 then
    % m% m1 h0 e% x7 ~- h& z6 J4 C, V
  25.                                 Q <= fifo_array(RD_PTR);
    % }" o. H+ V, N; z$ n# N: u
  26.                                 -- move pointer
    # |( V8 c! ^2 P
  27.                                 if RD_PTR=fmax then 9 E+ ?$ V7 [$ x1 d( M, x
  28.                                         RD_PTR <= 0; 2 F) R& Z- h7 {* U
  29.                                 else RD_PTR <= RD_PTR + 1;
    ( d5 S5 E6 t) @# C  @! S  O
  30.                                 end if;
    : }6 V. A1 m( j" f5 K4 z4 K3 `
  31.                         end if;
    2 W% u* {4 _4 W* v- ~! }
  32.                 end if;( p" e. a5 `# K# D" Q# P( A
  33.         end process;
    & Q1 i* D# J$ A+ o- _& h
  34. end architecture;
複製代碼
7#
發表於 2009-7-4 00:42:31 | 只看該作者
印象中有个工具可以转vhdl 为 verilog,可以看看,或许有用
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-6 12:24 PM , Processed in 0.106006 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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