EDN首页   博客首页

最新日志

发表于:2008-10-4 13:52:48
标签:Verilog  编辑器  

1

Notapad++——高亮显示Verilog的编辑器.(推介软件)

下载:http://notepad-plus.sourceforge.net/tw/site.htm

1.设置高亮显示语言:

语言——[对应语言]

2.每次启动Notepad++,Verilog都被自动高亮显示:

设置——首选项——新建——默认语言

选为Verilog即可。

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类:    |    来源: 原创

评论(0) | 阅读(88)
发表于:2008-9-9 12:34:20
标签:PLL  分频器  

3

使用PLL生成分频器.(Quartus II)

一、说明
PLL可以用作频率综合,也可以用来去抖动、修正占空比和移相等。
本文粗浅地利用PLL生成一个三倍分频器。
 
二、步骤
1.启动Quartus II软件。
2.新建一个工程。
点击看大图
3.新建Block Digram,插入altpll。
双击配置;
点击看大图
点击Next;
点击看大图
点击Next;
点击看大图
点击Finish。
插入如下管脚。
点击看大图
4.编译。
5.仿真,波形如下图所示。
 
三、其他
PLL的具体配置取决于所用的FPGA。
 

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

评论(0) | 阅读(267)
发表于:2008-9-8 14:19:25
标签:Vista  ip设置  

1

配置双ip上网.(Windows)

在不同场所上网,需要切换不同的ip。起初本人是手动填写,非常麻烦。后来发现,在Windows的TCP/IP设置中,利用"备用配置"即可实现双ip自动寻址。

操作如下图所示:

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类:    |    来源: 原创

评论(0) | 阅读(141)
发表于:2008-9-6 15:32:37
标签:Verilog  

2

移位运算与除法运算.(Verilog)

本人在写分频器时,反复修改编译,发现:右移运算比直接除法运算浪费资源。

举例:
运算符  分频倍数  消耗资源
N>>1   50 M    52(27)
        5 M    47(24)
N/2    50 M    51(27)
        5 M    45(24)

另见
1. N倍偶数分频器.(Verilog)

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

评论(1) | 阅读(195)
发表于:2008-9-5 11:46:03
标签:Verilog  计数器  七段数码管  

4

计秒七段数码管.(Verilog)

一、想法
七段数码管与二进制计数信号的同时计数,每秒一次。


二、HDL描述

counter_SEG7.v / Verilog


/*
(C) http://blog.ednchina.com/2006TX_yafeng
Filename    : counter_SEG7.v
Compiler    : Quartus II 8.0
Device      : EP2C20F484C7 (Altera DE1)
Description : 示例怎样生成一个计秒七段数码管
Release     : 9/5/2008 1.0
*/

module counter_SEG7 (
 output  [6:0]  HEX0,    // 七段数码管 0
  
 input CLOCK_50,         // 板载50 MHz时钟
 input wire  [0:0] KEY   // 按钮0
);
 
wire clk_1_Hz;           
reg  [15:0] cnt; 
 
// 例化分频器,得到1 Hz时钟
divider_by_50M u0 (
 .o_clk(clk_1_Hz),
 .rst_n(KEY),
 .i_clk(CLOCK_50)
);
 
// 获取按秒计数单元
always @ (posedge clk_1_Hz, negedge KEY)
begin
 if (!KEY)
  cnt <= 0;
 else
 begin
  if (cnt == 15)   // 1'hf
   cnt <= 0;
  else
   cnt <= cnt + 1'b1;
 end
end
 
// 例化七段数码管译码器       
SEG7_LUT  u1  (
  .oSEG0(HEX0),
  .iDIG(cnt[3:0])
);
endmodule

 
divider_by_50M.v / Verilog

module divider_by_50M (
 output  reg o_clk,
 input       rst_n,
 input       i_clk 
);
 
parameter N = 50_000_000;
parameter M = 24_999_999; // M=(N/2)-1
 
reg [25:0] cnt;
 
always @ (posedge i_clk, negedge rst_n)
begin
  if (!rst_n)
   cnt <= 0;
  else
  begin
    if (cnt == N-1)
      cnt <= 0;
    else
      cnt <= cnt + 26'b1;
  end
end
always @ (posedge i_clk, negedge rst_n)
begin
  if (!rst_n)
    o_clk <= 0;
  else
  begin
    if (cnt <= M)
      o_clk <= 1;
    else
      o_clk <= 0;
  end
end
 
endmodule


 
SEG7_LUT.v / Verilog

module SEG7_LUT (
 output reg [6:0] oSEG,
 input      [3:0] iDIG
);
always @ (iDIG)
begin
  case (iDIG)
   4'h1: oSEG = 7'b1111001; // ---t---
   4'h2: oSEG = 7'b0100100;  // |    |
   4'h3: oSEG = 7'b0110000;  // lt    rt
   4'h4: oSEG = 7'b0011001;  // |    |
   4'h5: oSEG = 7'b0010010;  // ---m---
   4'h6: oSEG = 7'b0000010;  // |    |
   4'h7: oSEG = 7'b1111000;  // lb    rb
   4'h8: oSEG = 7'b0000000;  // |    |
   4'h9: oSEG = 7'b0011000;  // ---b---
   4'ha: oSEG = 7'b0001000;
   4'hb: oSEG = 7'b0000011;
   4'hc: oSEG = 7'b1000110;
   4'hd: oSEG = 7'b0100001;
   4'he: oSEG = 7'b0000110;
   4'hf: oSEG = 7'b0001110;
   default: oSEG = 7'b1000000;
  endcase
end
endmodule

 
三、另见

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

评论(3) | 阅读(443)
发表于:2008-9-1 14:57:37
标签:Verilog  分频器  计数器  

2

计秒LED.(Verilog)

一. 想法
LED与二进制计数信号的同时闪亮,每秒一次。
 
二. HDL描述
counter_LED.v / Verilog

module counter_LED (
  output wire [7:0] LED,     // 低电平有效
  input             rst_n,   // 异步置零
  input             CLOCK_50 // 50 MHz 时钟
);
 
reg [7:0] mLED;

wire clk_1_Hz; // 秒钟
 
divider divider_50M ( // 例化分频器
  .o_clk(clk_1_Hz),
  .rst_n(rst_n),
  .i_clk(CLOCK_50)
);
 

always @ (posedge clk_1_Hz, negedge rst_n)
begin
  if (!rst_n)
    mLED <= 0;
  else
  begin
    if (mLED == 8'b11111111)
      mLED <= 0;
    else
      mLED <= mLED + 1'b1;
  end
end

assign LED = ~mLED;

endmodule


 
divider.v / Verilog

module divider (
  output reg  o_clk,
// 分频后的时钟

  input       rst_n, 
  input       i_clk
);
 
parameter N = 50_000_000; // 分频倍数
parameter M = 24_999_999; // M="N/2-1"
 
reg [25:0] cnt; // 分频倍数二进制位宽
 
always @ (posedge i_clk, negedge rst_n)
begin
  if (!rst_n)
    cnt <= 0;
  else 
  begin
    if (cnt == N)
      cnt <= 0;
    else
      cnt <= cnt + 1'b1;
  end
end
 
always @ (posedge i_clk, negedge rst_n)
begin
  if (!rst_n)
    o_clk <= 0;
  else
  begin
    if (cnt <= M)
      o_clk <= 1;
    else
      o_clk <= 0;
  end
end
 
endmodule

 
三. 其他
本例可作为使用分频器的范例。
 
 

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

评论(5) | 阅读(414)
发表于:2008-8-26 1:05:47
标签:PS/2  接口  

2

PS/2.(接口)


图1. Female connector


接口映射表


Pin 1 +DATA Data
Pin 2 Not connected Not connected*    保留*
Pin 3 GND Ground
Pin 4 Vcc +5 V DC at 100 mA
Pin 5 +CLK Clock
Pin 6 Not connected Not connected**  保留**


点击此处查看原文 >>

系统分类: 接口电路   |    用户分类:    |    来源: 整理

评论(1) | 阅读(208)
发表于:2008-8-24 16:49:48
标签:FSM  Verilog  

2

FSM状态的描述.(Verilog).(FSM)

一. 方法
1. 直接使用整数码描述


...

reg [1:0] moore_state;

always @ (moore_state)
begin
  case (moore_state)
    0: ...;
    1: ...;
    2: ...;
    ...
  endcase
end

...




2. 利用parameter声明


...

input     a;
reg [1:0] mealy_state;

parameter S0 = 0;
parameter S1 = 1;
parameter S2 = 2;
...

always @ (mealy_state or a)
begin
  case (mealy_state)
    S0: ...;
    S1: ...;
    ...
  endcase
end

...




3. 使用`define定义


...

`define S0 2'b00;
`define S1 2'b01;
...

module MealyFSM(clk, rst_n, a, y);

...



二. 注意

1. 直接采用整数码描述状态, 可读性差, 不利于修改维护;

2. 使用parameter声明状态, 可读性好, 利于修改维护;

3. 使用`define定义状态, 虽然能实现同样的功能, 当所定义的是全局变量, 作用域从`define开始, 直至所有代码结束, 这样可能为设计带来麻烦和错误;
parameter的作用域则在模块内部, 因此不同的模块可以安全地使用同名的状态名.

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 整理

评论(1) | 阅读(417)
发表于:2008-8-20 1:26:07
标签:Multisim  电路  范例  

2

NI Multisim 基础电路范例.(Multisim)

NI官网提供的NI Multisim Fundamental Circuits, 内容涵盖RLC电路, 二极管, 晶体管, 放大器, 运放, 滤波器和混合电路. 这些内容不仅可作为初学者的学习范例, 也可作为高级用户的参考范例.


仿真环境:
NI Multisim 10


内容提要:
Chapter 1: RLC Circuits
Chapter 2: Diodes
Chapter 3: Transistors
Chapter 4: Amplifiers
Chapter 5: Opamps
Chapter 6: Filters
Chapter 7: Miscellaneous Circuits


打包下载
(也可从官网自行下载)

点击此处查看原文 >>

系统分类: 模拟技术   |    用户分类:    |    来源: 原创

评论(0) | 阅读(284)
发表于:2008-8-19 15:33:03
标签:C  指针  

2

使用函数传回整数的百十个位.(C)

目的:  使用指针传递地址.

solveNumbers.c / C

#include <stdio.h>
void solveNumbers(int data,
  int * hundreds, int * tens, int * ones)
{
  *hundreds = (data % 1000) / 100;
  *tens     = (data % 100) / 10;
  *ones     = (data % 10) / 1;
}
 
int main()
{
  int data;
  int hs, ts, os;
 
  printf("Input a number: ");
  scanf("%d", &data);
 
  solveNumber(data, &hs, &ts, &os);
 
  printf("\nhundreds = %d, tens = %d, ones = %d\n",
    hs, ts, os);
 
  getch();
  return 0;
}

 
因为 &hs = hundreds;
所以 hs = *hundreds;
 

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(2) | 阅读(274)
23下一页总共 , 当前 /