Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] VHDL转verilog问题

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-12-29 14:16:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
手里面有个VHDL写的FIFO,现在想转换成VERILOG的5 _$ o6 J  d- S8 {& b) L( g
原代码如下

  1. : M8 [; {2 N( N# B- w6 O- `. \9 ~

  2. ! F( |" W9 Q- X: e) |$ G
  3. CNT: process(CLR, WR_PTR, RD_PTR)
    $ |& h  x: K$ ~- s; H
  4.   variable change : integer;  ' H9 G7 P$ a# d0 O4 G: l3 o
  5. begin  
    9 r4 Y5 I' B3 v0 A
  6.   if CLR = '1' then
    . D3 o+ J) f# g: J
  7.    count <= 0;. |" v/ |/ u7 v7 \( P8 R, K$ V' W
  8.    change := 0;
    # a+ d5 p6 S$ F' y2 A( q6 ~
  9.   else
    9 i1 J- S0 ^) ?( g) c- Z3 ^
  10.    change := 0;
    : q" t7 t7 v& h
  11.    if WR_PTR'event then
    $ \% O' b: X, `6 t5 z& z' Q  O8 B
  12.     change := 1;
    ! f% M4 q0 i8 G$ t; ^- H
  13.    end if;
    ' u- ?$ i" ]% M, j0 A
  14.    if RD_PTR'event then
    0 b2 E3 j0 b: N) _* n
  15.     change := change - 1;6 e: t1 n2 w2 K
  16.    end if;+ S* R& {: m! x9 O2 Q) k
  17.    count <= count + change;
    & f$ `5 N# R/ k* e2 O
  18.   end if;: e5 u" y# O8 w% }
  19. end process;
複製代碼
不知道改为Verilog该怎么写红色部分。3 r' S0 f2 `* |% G+ A3 t5 @: A
我想是用always@( WR_PTR)- J/ |( V7 S  j6 Y6 q  R
但是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' then
1 u4 x) e/ @- b, D2. count 沒有clock!你可能需要把全部貼出來,看是不是漏掉了?
6 f" t8 U& }  s" T3. 一個process有兩個clock,一般不會這樣寫的。
5#
 樓主| 發表於 2009-1-10 22:11:05 | 只看該作者
  1. ------------------------------------------------------------------------------------
    ! n# t" `5 I6 G0 v
  2. library IEEE;$ x) u- I, J# o( G% R$ ~& J' Z
  3. use IEEE.std_logic_1164.all;. \) j$ m/ d7 s! |4 a
  4. entity fifo is9 S& K% K1 M. E7 {' p
  5.         generic (
    + H3 U9 d/ v2 E" y1 }
  6.                 depth : positive := 16
    / z4 q) b) a9 z$ S$ e
  7.                 );          Y) [: e5 ^/ t- S* |$ V
  8.         port(& i" i9 K6 O) n/ o/ [
  9.                 CLR   : in  std_logic;; H1 ~2 H# ?' }7 S: M
  10.                 WCLK  : in  std_logic;
    2 G! O1 @1 y$ s! y8 d' C# |
  11.                 WE    : in  std_logic;0 f+ S' z( o/ x7 Q
  12.                 RCLK  : in  std_logic;9 J3 V1 u- B9 M' \
  13.                 RE    : in  std_logic;
    # L0 S9 B& U* e6 y
  14.                 DATA  : in  std_logic_vector(7 downto 0);' y1 n- l3 K# ?% D
  15.                 EMPTY : out std_logic;) v2 Z) F+ \% {( p  E
  16.                 FULL  : out std_logic;) H, D/ V7 y# T+ ?1 b
  17.                 Q     : out std_logic_vector(7 downto 0)  W2 t7 R# `2 X
  18.         );
    $ M1 q' _, g2 r  d0 h8 V
  19. end entity;' e& h- a) m" v$ ]/ t
  20. library IEEE;
    / i6 i8 P; Z8 S7 y( ^5 e
  21. use IEEE.std_logic_unsigned.all;2 r: e& s& k: U9 C
  22. architecture behavior of fifo is& }; C, w* O3 q
  23.         constant fmax : positive := depth-1;       
    + V: b/ Z4 h( a' i# A
  24.         type fifo_array_type is array (fmax downto 0) of std_logic_vector(7 downto 0);
    - U' P2 g: J3 ^
  25.         signal fifo_array : fifo_array_type;$ `& i% Z  d1 m  \7 @
  26.         signal WR_PTR : INTEGER range 0 to fmax;( O6 p: V% g! U4 e4 J. _7 m& D! J0 x# Z
  27.         signal RD_PTR : INTEGER range 0 to fmax;. t" t4 N0 {3 ^+ ]# _- v4 s. [
  28.         signal count  : INTEGER range 0 to depth;
    & l3 p; c" x5 Z& m
  29. begin
    ) c6 x0 L8 @8 e3 w. ]
  30.         CNT: process(CLR, WR_PTR, RD_PTR)
    ) h+ m$ J2 S" l' t1 g7 G9 w  `/ [( G
  31.                 variable change : integer;               
    " X" `* W6 a' Z  c4 E. P
  32.         begin  
    , A; l! \% W8 @2 o# f. }' r
  33.                 if CLR = '1' then
    $ }+ p" f- j% M/ q5 h) P3 B: d' @4 S6 x
  34.                         count <= 0;
    0 N0 K( z2 L3 g* O
  35.                         change := 0;0 C6 M5 L4 _/ H$ {  o
  36.                 else
    5 |9 [; I) L  H* o8 h
  37.                         change := 0;! \/ n8 B: a! ]0 w
  38.                         if WR_PTR'event then8 U3 t5 [4 n& Z9 D; e
  39.                                 change := 1;6 w1 E- d$ {( z* O$ l* [' |
  40.                         end if;0 ?8 h7 d5 O: R
  41.                         if RD_PTR'event then2 c( |4 ^" F4 M8 t1 i
  42.                                 change := change - 1;
    5 Y! Z! Y; c( ?  [4 \( J
  43.                         end if;
    9 t2 X& q% o* y# n6 Y+ }7 Q; _
  44.                         count <= count + change;7 ]+ B8 b9 W$ Y5 `6 z5 e* Y9 {
  45.                 end if;  q% q/ d/ {6 V6 {. F
  46.         end process;       
    , W+ m# x4 k$ s: M* g0 }
  47.         STATUS: process(count)5 F# @/ k" z- T+ @, J# W4 |$ J
  48.         begin  ( ^6 w# c" w/ e3 M
  49.                 if count=0 then1 l, \- b+ u6 m. y$ W
  50.                         FULL   <= '0';
    7 W, K" A3 |5 D  X7 N+ j" Z5 G
  51.                         EMPTY  <= '1';
    8 |! }( h) f, u7 g5 o
  52.                 elsif count=depth  then5 M* B* n8 o; T( C" Z" `* F( I
  53.                         FULL   <= '1';
    & I/ \, P- k3 B; u; }: |
  54.                         EMPTY  <= '0';
    ! `6 s. N* E& v% p& p
  55.                 else        4 y9 k- {* _! L
  56.                         FULL   <= '0';
    * D+ _' U% Y3 L" ]7 Y/ o. f
  57.                         EMPTY  <= '0'; ) w2 u2 ?% L2 s2 k/ L  y- a
  58.                 end if;                       
    9 ^& q7 Z% ^( e. g' K/ ~
  59.         end process;       
複製代碼
6#
 樓主| 發表於 2009-1-10 22:13:00 | 只看該作者
  1.         FWRITE: process (CLR, WCLK)
    , c9 g! r) b' Q/ G$ h; u# E6 ^
  2.         begin
    5 w/ u8 G3 S0 s& A0 O, b
  3.                 if CLR = '1' then( D7 y: s/ W$ f5 D! s
  4.                         for INDEX in fmax downto 0 loop! i  L6 o/ G7 z" A# m8 c1 G7 m
  5.                                 fifo_array(INDEX) <= (others => '0');- T3 H% g, r, ~3 c& q4 ~2 ?
  6.                         end loop;* k$ `6 y& I( O3 E4 K% M1 Y& W
  7.                         WR_PTR <= 0;& y' B- g4 f% S' w/ |
  8.                 elsif rising_edge(WCLK) then+ r1 y6 J+ C' l! _! y# ?
  9.                         if WE = '1' and count<depth then) \* ^; G, n* Y, Z3 N5 f/ _4 w
  10.                                 fifo_array(WR_PTR) <= DATA;! x) R2 ^. ^; t% K
  11.                                 -- move pointer
    6 h- u1 p7 W- h% `8 s
  12.                                 if WR_PTR=fmax then
    5 C- G, E' G7 O; @: p
  13.                                         WR_PTR <= 0;
    7 f% v* w. i' \+ G
  14.                                 else WR_PTR <= WR_PTR + 1;& y  v, b+ N8 \8 Z
  15.                                 end if;
    : T4 Z4 d- t! \6 b
  16.                         end if;1 N7 R# y" W* S8 s% Q8 {
  17.                 end if;1 d3 Q2 u7 c% j; X5 C' B
  18.         end process;
    3 B8 A0 b. _: ]5 x) ?/ F
  19.         FREAD: process (CLR, RCLK)" G  @5 K. D' x2 Q. q) a
  20.         begin
    . X! I5 R* j  Y! F6 A
  21.                 if CLR = '1' then) R& ~' W/ E# h5 B6 Q2 _' D( w
  22.                         RD_PTR <= 0;
    4 _+ w* e% y% U0 h: ~
  23.                 elsif falling_edge(RCLK) then, I" W9 c7 J' C' Q: `
  24.                         if RE = '1' and count>0 then
    8 o$ L' z: C7 y6 k  j
  25.                                 Q <= fifo_array(RD_PTR);
    / j2 h- f) a% L4 l# O
  26.                                 -- move pointer 9 F0 t  E2 Y' o
  27.                                 if RD_PTR=fmax then 1 J* o' L, v' f
  28.                                         RD_PTR <= 0;
    / R0 y- [7 s( d4 J$ v
  29.                                 else RD_PTR <= RD_PTR + 1;
    : x7 v- ], w+ E& J: C3 X
  30.                                 end if;
    " `( z8 c; d8 g
  31.                         end if;0 _/ n' y' f- s# Y( k" ?
  32.                 end if;! e& l- J' ?* j1 [* n$ h, ]- e
  33.         end process;
    / l& H- b3 I- B  U$ Z$ b, F
  34. end architecture;
複製代碼
7#
發表於 2009-7-4 00:42:31 | 只看該作者
印象中有个工具可以转vhdl 为 verilog,可以看看,或许有用
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-18 09:19 AM , Processed in 0.112014 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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