这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 136.finema CPLD 进程帖(理解VGA时序)

共26条 2/3 1 2 3 跳转至
助工
2013-07-07 21:59:00     打赏
11楼
好了,现在硬件和软件都调通了,时刻准备着学习教主开启的系列教程。

助工
2013-09-04 23:27:15     打赏
12楼

2013-09-04

折腾了2晚,今晚终于完成了我的第一份课后作业——点亮LED灯。

 

主要是跟着版主的视频学习。

 

我的代码如下:

//////////////////////////////////////////////////////////////////////////////////
// Engineer: 136.finema
//
// Create Date:    22:35:14 09/03/2013
//////////////////////////////////////////////////////////////////////////////////

 

module Led(led); //模块名
output [7:0] led; //输出口
reg [7:0] led;  //寄存器

always
begin
 //led <= 8'b10101010; //间隔输出 Led1亮Led2灭....
 led <= 8'b01010101;  //间隔输出 Led1灭Led2亮....
end

endmodule

 

 


助工
2013-09-04 23:29:07     打赏
13楼

LED的代码昨晚已经写好了,但是进行编译时报错误,如下:

1.Warning (292000): FLEXlm software error: Invalid (inconsistent) license key.  The license key and data for the feature do not match.  This usually happens when a license file has been altered. Feature:       quartus License path:  E:\devs\altera\12.0\quartus\bin\license.dat; FLEXnet Licensing error:-8,523 For further information, refer to the FLEXnet Licensing documentation, available at "www.acresso.com".
2.Error (119013): Current license file does not support the EPM240T100C5 device

说当前授权文件不支持EPM240T100C5设备。 但我明明都破解成功,已经没30天的限制提示了,啥原因啊?

后来在群里咨询了一下,版主和群里的成员都有提到是破解有问题。

 

我又用我原来的破解程序,重试了几次,还是不行。

后来从群里共享下了个“Crack_QII_12.0_Windows密码12345.rar”的破解程序,重新破解,问题解决。

注意,如果运行“Quartus_12.0_x86破解器.exe” 点应用时,提示“什么文件正在使用,需要关闭程序文件,再继续”的,应该用“sys_cpt.dll.BAK” 还原回“sys_cpt.dll” 再运行破解。

 

 


助工
2013-09-05 23:29:55     打赏
14楼

跟着版主学。今晚完成了第二份课后作业——LED1秒闪烁。代码如下。 明晚跟着做仿真。


`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
//学号: 136.finema
//
//创建时间:    21:43:14 09/05/2013
//名称:led_flicker
//功能:LED间隔1秒闪烁
//////////////////////////////////////////////////////////////////////////////////

module led_ficker(sys_clk,sys_rst,led);
 input sys_clk;   //输入时钟信号
 input sys_rst;   //输入复位信号
 output [7:0] led;  //输出信号
 
 //变量定义
 reg [7:0] led;
 reg [25:0] counter;  //计数器.  50MHz时钟, 因此计数器要计数 50M次=50*1000*1000 就为1秒
     
 //如果复位,则LED全亮,计数器给0
 //计数器到49999999,则反转一下
 
 //计数器的逻辑处理
 always @(posedge sys_clk,negedge sys_rst) //只对时钟上升沿信号和复位下降沿信号敏感
 begin
  if (!sys_rst)
   counter <=26'd0;
  else
   begin
    if (counter==26'd49999999)
     counter<=26'd0;
    else
     counter<=counter+1'b1;
   end
 end
 
 //led的逻辑处理
 always @(posedge sys_clk,negedge sys_rst)
 begin
  if (!sys_rst)
   led <= 8'b11111111;
  else
   begin
    if (counter==26'd49999999)
     led<=~led;    
   end
 end

endmodule


助工
2013-09-08 09:53:49     打赏
15楼

2013.09.08

昨天,看视频学习了Modersim testbench文件的编写,以及modersim软件的使用。

 

以下是 LED1秒闪烁的testbench源代码。

 


`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
//学号: 136.finema
//
//创建时间:    11:26:14 09/07/2013
//名称:led_flicker_test
//功能:LED间隔1秒闪烁测试
//////////////////////////////////////////////////////////////////////////////////

module led_flicker_test;
 
 //变量定义
 //输入
 reg sys_clk;
 reg sys_rst;
 
 //输出
 wire [7:0] led;
 
 
 //时钟激烈产生, 周期20ns,即50MHz
 initial
 begin
  sys_clk = 0;
  forever
   # 10 sys_clk = ~sys_clk;
 end

 //复位激励产生
 initial
 begin
  sys_rst = 1;
  # 10 sys_rst = 0;
  # 50 sys_rst = 1;
 end
 
 
 //被测模块实例
 led_flicker led_flicker_inst(
  .sys_clk(sys_clk),
  .sys_rst(sys_rst),
  .led(led)
 );
 
endmodule


助工
2013-09-08 10:54:20     打赏
16楼

2013.09.08

今天,根据前2节LED课学的内容,自己编了 LED流水灯。 代码如下:

 

`timescale 1ns / 1ps
`define ONE_SECOND  26'd49999999 //50MHz时钟, 因此计数器要计数 50M次=50*1000*1000 就为1秒

//////////////////////////////////////////////////////////////////////////////////
//学号: 136.finema
//
//创建时间:    10:00:14 09/08/2013
//名称:led_water
//功能:LED流水灯
//算法:每秒种点亮1盏灯,点够8盏,又重新来
//////////////////////////////////////////////////////////////////////////////////

module led_water(sys_clk,sys_rst,led);
 input sys_clk;   //输入时钟信号
 input sys_rst;   //输入复位信号
 output [7:0] led;  //输出信号
 
 //变量定义 
 reg [7:0] led;
 reg [25:0] timeCounter;  //时间计数器. 
 
 //计数器的逻辑处理
 always @(posedge sys_clk,negedge sys_rst) //只对时钟上升沿信号和复位下降沿信号敏感
 begin
  if (!sys_rst)
   timeCounter <=26'd0;
  else
   begin
    if (timeCounter==`ONE_SECOND)
     timeCounter<=26'd0;
    else
     timeCounter<=timeCounter+1'b1;
   end
 end
 
 
 //led的逻辑处理
 always @(posedge sys_clk,negedge sys_rst)
 begin
  if (!sys_rst)
   led <= 8'b11111111;
  else
   begin
    if (timeCounter==`ONE_SECOND)
    begin
     if (led==8'b00000000)
      led <= 8'b11111111;
     else
      led <=(led<<1);  //像左移位
    end
       
   end
 end

endmodule


助工
2013-09-08 17:07:49     打赏
17楼

2013.09.08

完成第四份课后作业——LED跑马灯

 

看视频学习,学到了用位拼接运算符,进行循环移位。 不过我进行实现时没有用拼接运算,而是用了求反移位,相对来说代码没版主的优雅。

 

 

`timescale 1ns / 1ps
`define ONE_SECOND  26'd49999999 //50MHz时钟, 因此计数器要计数 50M次=50*1000*1000 就为1秒

//////////////////////////////////////////////////////////////////////////////////
//学号: 136.finema
//
//创建时间:    16:31:14 09/08/2013
//名称:led_run
//功能:LED跑马灯,按照顺序1~8, 每秒种只点亮1盏灯,点够8盏,又重新来
//////////////////////////////////////////////////////////////////////////////////

module led_run(sys_clk,sys_rst,led);
 input sys_clk;   //输入时钟信号
 input sys_rst;   //输入复位信号
 output [7:0] led;  //输出信号
 
 //变量定义 
 reg [7:0] led;
 reg [25:0] timeCounter;  //时间计数器. 
 
 //计数器的逻辑处理
 always @(posedge sys_clk,negedge sys_rst) //只对时钟上升沿信号和复位下降沿信号敏感
 begin
  if (!sys_rst)
   timeCounter <=26'd0;
  else
   begin
    if (timeCounter==`ONE_SECOND)
     timeCounter<=26'd0;
    else
     timeCounter<=timeCounter+1'b1;
   end
 end
 
 
 //led的逻辑处理
 always @(posedge sys_clk,negedge sys_rst)
 begin
  if (!sys_rst)
   led <= 8'b11111110;
  else
   begin
    if (timeCounter==`ONE_SECOND)
    begin
     if (led==8'b01111111)
      led <= 8'b11111110;
     else
      led <=~((~led)<<1);  //先求反,再向左移位,最后求反
    end
       
   end
 end

endmodule

 

 


助工
2013-09-08 17:08:33     打赏
18楼
暂住。

助工
2013-09-14 23:13:19     打赏
19楼

谢谢版主鼓励,迟点整理个目录。


助工
2013-09-14 23:26:06     打赏
20楼

2013.09.14

 

跟着版主视频学,完成第五份课后作业,代码如下。

 

注:版主视频中提到的 7段数码管代码查询工具,版主在群里共享了一份,我把它上传到了服务器上,链接为

 http://share.eepw.com.cn/share/download/id/90001

 

`timescale 1ns / 1ps
`define ONE_SECOND  26'd49999999 //50MHz时钟, 因此计数器要计数 50M次=50*1000*1000 就为1秒

//////////////////////////////////////////////////////////////////////////////////
//学号: 136.finema
//
//创建时间:    21:49:14 09/14/2013
//名称:dig_display_dip
//功能:数码管静态循环显示,用DIP控制哪个数码管亮
//算法:
//////////////////////////////////////////////////////////////////////////////////

module dig_display_dip(sys_clk,
       sys_rst,
       dip,
       dig_seg,
       dig_bit);
 input sys_clk;   //输入时钟信号
 input sys_rst;   //输入复位信号
 input [7:0] dip;  //输入DIP
 
 output [7:0] dig_seg;  //输出数码管段码
 output [7:0] dig_bit;  //输出数码管位码
 
 //变量定义 
 reg [7:0] dig_seg;
 wire [7:0] dig_bit;
 
 reg [25:0] timeCounter;  //时间计数器. 
 reg [7:0] charIndex;   //字符索引. 
 
 //计数器的逻辑处理
 always @(posedge sys_clk,negedge sys_rst) //只对时钟上升沿信号和复位下降沿信号敏感
 begin
  if (!sys_rst)
   timeCounter <=26'd0;   
  else
   begin
    if (timeCounter==`ONE_SECOND)
     timeCounter<=26'd0;
    else
     timeCounter<=timeCounter+1'b1;
   end
 end
 
 
 //led的逻辑处理
 always @(posedge sys_clk,negedge sys_rst)
 begin
  if (!sys_rst)
   begin   
    charIndex <=8'd0;
   end
  else
   begin
    if (timeCounter==`ONE_SECOND)
     begin                        
      charIndex <=charIndex+1'b1;            
     end
    else
     begin    
      charIndex <= charIndex;
      if (charIndex>8'd16)     
       charIndex <=8'd0;      
     end
       
   end
 end


 
 //数码管显示
 always @(charIndex)
 begin
  case (charIndex)
   8'd0: dig_seg<=8'hC0;  //0
   8'd1: dig_seg<=8'hF9;  //1
   8'd2: dig_seg<=8'hA4;  //2
   8'd3: dig_seg<=8'hB0;  //3
   8'd4: dig_seg<=8'h99;  //4
   8'd5: dig_seg<=8'h92;  //5
   8'd6: dig_seg<=8'h82;  //6
   8'd7: dig_seg<=8'hF8;  //7
   8'd8: dig_seg<=8'h80;  //8
   8'd9: dig_seg<=8'h90;  //9
   8'd10: dig_seg<=8'h88; //A
   8'd11: dig_seg<=8'h83; //B
   8'd12: dig_seg<=8'hC6; //C
   8'd13: dig_seg<=8'hA1; //D
   8'd14: dig_seg<=8'h86; //E
   8'd15: dig_seg<=8'h8E; //F
   8'd16: dig_seg<=8'h7F; //.
   default: dig_seg<=8'hC0;
  endcase
 end
 
 //连续赋值,8个数码管根据DIP导通
 assign dig_bit = dip; 
endmodule

 

我用到的tcl文件,内容如下:

 


共26条 2/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]