SOGO論壇

標題: Verilog問題... [列印本頁]

作者: 紅塵孤鳥    時間: 2011-7-21 11:01:38     標題: Verilog問題...

老鳥這陣子有點時間,搞了一片FPGA實驗板來玩,從簡單的全加器、BCD計數器開始,昨天開始研究使用Verilog寫PWM產生器,在此之前就先研究一下除頻器,但也遇到了一些問題,不知道有沒有掏手可以幫一下...


功能是將25MHz除頻成1MHz

module OSC1M(clk_in,clk_1M);
  input   clk_in;
  output  clk_1M;
  wire    clk_in,clk_1M;
  reg     [4:0]count=5'h00;
  
  always @(posedge clk_in)
    begin
      count = count+1;
      clk_1M = count[4];
    end
endmodule


這段在compile時出現錯誤:Error: C:/altera/90/BY4/1MOSC.v(11): (vlog-2110) Illegal reference to net "clk_1M".
想半天還是沒搞出來...

再來,模擬時,老鳥想灌一個25MHz的固定頻率來做輸入訊號,於是寫了一段testbench:

`timescale 1ms/100ms
module SOC1M_tb;
  SOC1M dex(.clkin(clkin),.clkout(clkout));
  parameter hperi=40;
  
  initial begin
    clkin=1'b0;
  end
  
  always begin
    forever # hperi clkin=~clkin;
  end
  
endmodule


這更慘!也還搞不清楚那邊出錯...= = "
有沒有高手可以幫忙看一下...
作者: alphi    時間: 2011-7-21 21:06:34

使用wire 所宣告的變數必須配合assign 敘述來
改變其值,且不能在always 區塊中作為敘述的
左值(l-value) 。
使用reg 所宣告的變數必須使用在always 區塊
中作為敘述的左值。
作者: Jackchen00    時間: 2011-7-26 14:35:01

module OSC1M(clk_in,clk_1M);
  input   clk_in;
  output  clk_1M;
  reg     [4:0] count;
  
assign  clk_1M = count[4];

always @(posedge clk_in)
   begin
      if (count < 24) count <= count + 1; //計數到24的下一個clock將count歸零,所以count會從0~24共25個clock
      else count <= 0;
   end
endmodule

《 本帖最後由 Jackchen00 於 2011-7-26 14:39 編輯 》




歡迎光臨 SOGO論壇 (https://oursogo.com/) Powered by OURSOGO.COM