当前位置: 首页 > news >正文

EDA-课设

EDA-课程设计-电子闹钟

一、实验目的

1.掌握多层电路在 QuartusII 集成开发环境中的实现;
2.熟练掌握基于 QuartusII 集成开发环境的组合逻辑电路设计流程;
3.掌握基于 QuartusII 集成开发环境的时序逻辑电路设计流程;
4.理解有限状态机设计的基本原理;
5.掌握采用有限状态机设计电路的方法;
6.掌握有限状态机的 VerilogHDL 实现;
7.熟练开发板的使用;
8.锻炼综合设计电路能力。

二、实验任务及要求

基本功能:正常时间显示,闹钟时间显示,闹钟触发。

三、实验原理和步骤

3.1 功能介绍

FPGA 实现电子闹钟。具有的功能为:

  1. 基础功能:
    1)正常时间的显示。
    2)闹钟时间的显示。
    3)闹钟触发
  2. 设计功能:
    1)手动调整当前时间。
    2)手动设置闹钟时间。
    3)闹钟触发时,LED会呈花式闪烁,闪烁时间为一分钟。
    4)秒表功能,可以选择正向计时或者倒计时。
    5)温度显示功能,可以根据时间的变化,显示不同的温度。

3.2 设计思路

  1. 对本次设计所需要的彩灯、七段数码管、开关、和按键进行一个汇总,并提前查阅其各自的管脚,进行分配。对于彩灯,选取8个作为闹钟触发时闪烁用;选取6个七段数码管,每两个显示时或分或秒,剩余两个表示温度;选取15个开关,每五个对应时、分、秒的设置,再用两个开关用于手动设置现在时间和闹钟时间;4个按键,一个表示计时显示按键,一个表示设置正计时,一个设置倒计时,一个用于启动计时。
  2. 用偶数分频的方法设计出来一个1s的时钟,用于后面的时间显示以及状态转移的持续时间。
  3. 设计时分秒的显示。
  4. 设计温度的显示。
  5. 用有限状态机的设计方法进行8路彩灯的显示。
  6. 设计正常时间运行的模块
  7. 设计设置闹钟时间的模块
  8. 设计调整现在时间的模型
  9. 设计正计时和倒计时模块

3.3 模块结构

  1. 模块一:设计1s的时钟信号。
  2. 模块二:正常时间显示模块。
  3. 模块三:设置闹钟时间与闹钟触发。
  4. 模块四:手动调整时间。
  5. 模块五:时间显示模型。
  6. 模块六:闹钟触发的8路彩灯显示。
  7. 模块七:计时模块。
  8. 模块八:温度显示模块。

四、代码

主模块

module syks(clk,set1,set2,JS3,JS2,JS1,JS0,in_S,in_F,in_M,out_S,out_F,out_M,out_LED,out_WD);
(*chip_pin = "Y2"*) input clk;
(*chip_pin = "AC27"*) input set1;
(*chip_pin = "AC28"*) input set2;
(*chip_pin = "R24"*) input JS3;
(*chip_pin = "N21"*) input JS2;
(*chip_pin = "M21"*) input JS1;
(*chip_pin = "M23"*) input JS0;
(*chip_pin = "Y23,Y24,AA22,AA23,AA24"*) input[4:0] in_S;
(*chip_pin = "AB23,AB24,AC24,AB25,AC25"*) input[4:0] in_F;
(*chip_pin = "AB26,AD26,AC26,AB27,AD27"*) input[4:0] in_M;
(*chip_pin = "AD17,AE17,AG17,AH17,AF17,AG18,AA14,AA17,AB16,AA16,AB17,AB15,AA15,AC17"*) output[13:0] out_S;
(*chip_pin = "AD18,AC18,AB18,AH19,AG19,AF18,AH18,AB19,AA19,AG21,AH21,AE19,AF19,AE18"*) output[13:0] out_F;
(*chip_pin = "V21,U21,AB20,AA21,AD24,AF23,Y19,AA25,AA26,Y25,W26,Y26,W27,W28"*) output[13:0] out_M;
(*chip_pin = "H15,G16,G15,F15,H17,J16,H16,J15"*) output[7:0] out_LED;
(*chip_pin = "M24,Y22,W21,W22,W25,U23,U24,G18,F22,E17,L26,L25,J22,H22"*) output[13:0] out_WD;
wire clk1;
reg[5:0] count_S = 6'd0,count_F = 6'd0,count_M = 6'd0,count = 6'd60;
reg[5:0] tmp_S = 6'd0,tmp_F = 6'd0,tmp_M = 6'd0,tmp_WD = 6'd0;
reg[5:0] set_S = 6'd10,set_F = 6'd10,set_M = 6'd10;
reg[5:0] MB_S = 6'd0,MB_F = 6'd0,MB_M = 6'd0;
reg flag = 1, flag1 = 1,flag2 = 0,flag3 = 0,flag4 = 1,flag5 = 1,flag6 = 1;
fenpin(clk,clk1);
always@(negedge JS0) flag1 = ~flag1;
always@(negedge JS1,negedge JS2) 
beginif(!JS1)beginflag2 = 1;flag3 = 0;endif(!JS2)beginflag2 = 0;flag3 = 1;end
end
always@(negedge JS3) 
beginflag6 = ~flag6;
end
always@(posedge clk1,negedge set1,negedge set2,negedge flag1)
begin//if(!flag1) beginif(flag2)begin tmp_S = 6'd0;tmp_F = 6'd0;tmp_M = 6'd0;tmp_WD = 6'd0;MB_S = {1'b0,in_S};MB_F = {1'b0,in_F};MB_M = {1'b0,in_M};flag5 = 1;endelse if(flag3)begintmp_S = {1'b0,in_S};tmp_F = {1'b0,in_F};tmp_M = {1'b0,in_M};tmp_WD = 6'd0;MB_S = 6'd0;MB_F = 6'd0;MB_M = 6'd0;flag5 = 0;endendelse if(!set2)beginset_S = {1'b0,in_S};set_F = {1'b0,in_F};set_M = {1'b0,in_M};count = 6'd60;flag = 1;endelse if(!set1) begincount_S = {1'b0,in_S};count_F = {1'b0,in_F};count_M = {1'b0,in_M};count = 6'd60;tmp_S = count_S;tmp_M = count_M;tmp_F = count_F;tmp_WD = count_S;flag = 1;endelsebeginif(flag6 == 0)beginif(flag5)beginif(flag4)beginif(tmp_M == 59) begintmp_M = 6'd0;if (tmp_F == 59)begintmp_F = 6'd0;if(tmp_S == 23) tmp_S = 6'd0;else tmp_S = tmp_S + 1;endelse tmp_F = tmp_F + 1;endendelse tmp_M = tmp_M + 1;if ((tmp_S == MB_S) && (tmp_F == MB_F) &&(tmp_M == MB_M)) flag4 = 0;endelse beginif(flag4)beginif(tmp_M == 6'd0) beginif(tmp_F == 6'd0) beginif(tmp_S == 6'd0) flag4 = 0;elsebegintmp_S = tmp_S - 1;tmp_F = 6'd59;endendelsebegintmp_F = tmp_F - 1;tmp_M = 6'd59;endendelse tmp_M = tmp_M - 1;endendendelse begin if(count_M == 59) begincount_M = 0;if (count_F == 59)begincount_F = 0;if(count_S == 23) count_S = 0;else count_S = count_S + 1;endelse count_F = count_F + 1;endelse count_M = count_M + 1;if ((count_S == set_S) && (count_F == set_F) &&(count_M == set_M)) count = 6'd0;if(count < 6'd60)begin count = count + 1;flag = 0;endelse flag = 1;tmp_S = count_S;tmp_M = count_M;tmp_F = count_F;tmp_WD = count_S;flag4 = 1;endend
end
show_LED(clk1,flag,out_LED);
show_SZ(clk1,tmp_S,out_S);
show_SZ(clk1,tmp_F,out_F);
show_SZ(clk1,tmp_M,out_M);
show_WD(clk,tmp_WD,out_WD);
endmodule

分频模块

module fenpin(clk,clk1);
input clk;
output reg clk1;
reg[30:0] count;
always@(posedge clk) 
beginif (count == 24999999) begincount = 0;clk1 = ~clk1;endelse count = count + 1;
end
endmodule

LED显示模块

module show_LED(clk,in,out);
input in,clk;
output reg[7:0] out;
parameter s0 = 3'b000,s1 = 3'b001,s2 = 3'b010,s3 = 3'b011,s4 = 3'b100;
reg[2:0] cs,ns;always@(posedge clk)
beginif(in) cs = s4;else cs = ns;
end
always@(cs)
begincase(cs)s0:ns = s1;s1:ns = s2;s2:ns = s3;s3:ns = s4;s4:ns = s0;endcase
end
always@(cs)
begincase(cs)s0:out = 8'b10000001;s1:out = 8'b11000011;s2:out = 8'b11100111;s3:out = 8'b11111111;s4:out = 8'b00000000;endcase
end
endmodule

时钟显示模块

module show_SZ(clk,count,out);
input clk;
input[5:0] count;
output reg[13:0] out;
always @(posedge clk)
begincase(count)6'd0:out = 14'b0000001_0000001;6'd1:out = 14'b0000001_1001111;6'd2:out = 14'b0000001_0010010;6'd3:out = 14'b0000001_0000110;6'd4:out = 14'b0000001_1001100;6'd5:out = 14'b0000001_0100100;6'd6:out = 14'b0000001_0100000;6'd7:out = 14'b0000001_0001111;6'd8:out = 14'b0000001_0000000;6'd9:out = 14'b0000001_0000100;6'd10:out = 14'b1001111_0000001;6'd11:out = 14'b1001111_1001111;6'd12:out = 14'b1001111_0010010;6'd13:out = 14'b1001111_0000110;6'd14:out = 14'b1001111_1001100;6'd15:out = 14'b1001111_0100100;6'd16:out = 14'b1001111_0100000;6'd17:out = 14'b1001111_0001111;6'd18:out = 14'b1001111_0000000;6'd19:out = 14'b1001111_0000100;6'd20:out =14'b0010010_0000001;6'd21:out = 14'b0010010_1001111;6'd22:out = 14'b0010010_0010010;6'd23:out = 14'b0010010_0000110;6'd24:out = 14'b0010010_1001100;6'd25:out = 14'b0010010_0100100;6'd26:out =14'b0010010_0100000;6'd27:out = 14'b0010010_0001111;6'd28:out = 14'b0010010_0000000;6'd29:out = 14'b0010010_0000100;6'd30:out = 14'b0000110_0000001;6'd31:out = 14'b0000110_1001111;6'd32:out = 14'b0000110_0010010;6'd33:out = 14'b0000110_0000110;6'd34:out = 14'b0000110_1001100;6'd35:out = 14'b0000110_0100100;6'd36:out = 14'b0000110_0100000;6'd37:out = 14'b0000110_0001111;6'd38:out = 14'b0000110_0000000;6'd39:out = 14'b0000110_0000100;6'd40:out = 14'b1001100_0000001;6'd41:out = 14'b1001100_1001111;6'd42:out = 14'b1001100_0010010;6'd43:out = 14'b1001100_0000110;6'd44:out = 14'b1001100_1001100;6'd45:out = 14'b1001100_0100100;6'd46:out = 14'b1001100_0100000;6'd47:out = 14'b1001100_0001111;6'd48:out = 14'b1001100_0000000;6'd49:out = 14'b1001100_0000100;6'd50:out = 14'b0100100_0000001;6'd51:out = 14'b0100100_1001111;6'd52:out = 14'b0100100_0010010;6'd53:out = 14'b0100100_0000110;6'd54:out = 14'b0100100_1001100;6'd55:out = 14'b0100100_0100100;6'd56:out = 14'b0100100_0100000;6'd57:out = 14'b0100100_0001111;6'd58:out = 14'b0100100_0000000;6'd59:out = 14'b0100100_0000100;default:out = 14'b1111111_1111111;endcase
end
endmodule

show_wd.v 模块

module show_WD(clk,in_s,out);
input clk;
input[5:0] in_s;
output[13:0] out;
reg[5:0] count_WD;
always@(clk)
beginif(in_s >= 0 && in_s < 6'd8 ) count_WD = 6'd20;else if (in_s >= 6'd8 && in_s <= 6'd16) count_WD = 6'd25;else count_WD = 6'd18;
end
show_SZ(clk,count_WD,out);
endmodule

test.v 模块

if(flag6 == 0)beginif(flag5)beginif(flag4)beginif(tmp_M == 59) begintmp_M = 0;if (tmp_F == 59)begintmp_F = 0;if(tmp_S == 23) tmp_S = 0;else tmp_S = tmp_S + 1;endelse tmp_F = tmp_F + 1;endelse tmp_M = tmp_M + 1;if ((tmp_S == MB_S) && (tmp_F == MB_F) &&(tmp_M == MB_M)) flag4 = 0;endendelse beginif(flag4)beginif(tmp_M == 0) beginif(tmp_F == 0) beginif(tmp_S == 0) flag4 = 0;elsebegintmp_S = tmp_S - 1;tmp_F = 6'd59;endendelsebegintmp_F = tmp_F - 1;tmp_M = 6'd59;endendelse tmp_M = tmp_M - 1;endendendelse if(!flag1) beginif(flag2)begin tmp_S = 0;tmp_F = 0;tmp_M = 0;tmp_WD = 0;MB_S = {1'b0,in_S};MB_F = {1'b0,in_F};MB_M = {1'b0,in_M};flag5 = 1;endelse if(flag3)begintmp_S = {1'b0,in_S};tmp_F = {1'b0,in_F};tmp_M = {1'b0,in_M};tmp_WD = 0;MB_S = 0;MB_F = 0;MB_M = 0;flag5 = 0;endendelse 

相关文章:

EDA-课设

EDA-课程设计-电子闹钟 一、实验目的 1.掌握多层电路在 QuartusII 集成开发环境中的实现&#xff1b; 2.熟练掌握基于 QuartusII 集成开发环境的组合逻辑电路设计流程&#xff1b; 3.掌握基于 QuartusII 集成开发环境的时序逻辑电路设计流程&#xff1b; 4.理解有限状态机设计…...

C/C++每日一练(20230222)

目录 1. 部分复制字符串(★) 2. 按字典顺序排列问题(★★) 3. 地下城游戏(★★★) 附录 动态规划 1. 部分复制字符串 将字符串2小写字母复制到字符串1&#xff1a;编写程序,输入字符串s2,将其中所有小写字母复制到字符串数组strl中。例如&#xff1a;aal1bb22cc33de4AA55…...

Java API 文档搜索引擎

1. 认识搜索引擎:在搜狗搜索的搜索结果页中, 包含了若干条结果, 每一个结果包含了图标, 标题, 描述, 展示URL等搜索引擎的本质:输入一个查询词, 得到若干个搜索结果, 每个搜索结果包含了标题, 描述, 展示URL和点击URL2. 搜索引擎思路:2.1 搜索的核心思路:当前我们有很多的网页(…...

2023美赛C题Wordle二三问分布预测和难度分类预测

文章目录前言题目介绍人数分布预测首先建立字母词典&#xff0c;加上时间特征数据预处理训练和预测函数保存模型函数位置编码模型及其参数设置模型训练以及训练曲线可视化预测人数分布难度分类预测总结前言 2023美赛选了C题&#xff0c;应该很多人会选&#xff0c;一看就好做&…...

gdb的简单练习

题目来自《ctf安全竞赛入门》1.用vim写代码vim gdb.c#include "stdio.h" #include "stdlib.h" void main() {int i 100;int j 101;if (i j){printf("bingooooooooo.");system("/bin/sh");}elseprintf("error............&quo…...

如何使用python AI快速比对两张人脸图像?

本篇文章的代码块的实现主要是为了能够快速的通过python第三方非标准库对比出两张人脸是否一样。 实现过程比较简单&#xff0c;但是第三方python依赖的安装过程较为曲折&#xff0c;下面是通过实践对比总结出来的能够支持的几个版本&#xff0c;避免大家踩坑。 python版本&a…...

(2)C#传智:变量基础(第二天)

一、注释符 不写注释是流氓&#xff0c;名字瞎起是扯蛋。 注释作用&#xff1a;解释与注销 命名&#xff1a; 以字母、_、开头&#xff0c;里面只能有_与特殊符&#xff0c;其它不得出现如%*&^等。 不能与关键字重复。区分大小写&#xff0c;Num…...

02-mysql高级-

文章目录mysql高级1&#xff0c;约束1.1 概念1.2 分类1.3 非空约束1.4 唯一约束1.5 主键约束1.6 默认约束1.7 约束练习1.8 外键约束1.8.1 概述1.8.2 语法1.8.3 练习2&#xff0c;数据库设计2.1 数据库设计简介2.2 表关系(一对多)mysql高级 今日目标 掌握约束的使用 掌握表关系…...

windows 使用everything 查看文件(夹)存储空间占用

起因 总是那个原因,C: D: E:全都红了,下的游戏太多了,然后就这样了,之前也有过不少这种情况.几年前,就在智能手机上见过类似的功能. 大概就是遍历文件系统,统计每个文件的大小,然后父节点记录所有子节点的和,然后可以显示占用百分比之类的. 经过 在windows 上我最开始使用ex…...

2023该好好赚钱了,推荐三个下班就能做的副业

在过去的两年里&#xff0c;越来越多的同事选择辞职创业。许多人通过互联网红利赚到了他们的第一桶金。随着短视频的兴起&#xff0c;越来越多的人吹嘘自己年收入百万&#xff0c;导致很多刚进入职场的年轻人逐渐迷失自我&#xff0c;认为钱特别容易赚。但事实上&#xff0c;80…...

vue3如何进行数据监听watch/watchEffect

我们都知道监听器的作用是在每次响应式状态发生变化时触发&#xff0c;在组合式 API 中&#xff0c;我们可以使用 watch()函数和watchEffect()函数, 当你更改了响应式状态&#xff0c;它可能会同时触发 Vue 组件更新和侦听器回调。 默认情况下&#xff0c;用户创建的侦听器回…...

Wgcloud安装和使用(性能监控)

一、Wgcloud说明 官网&#xff1a;https://www.wgstart.com/ WGCLOUD支持主机各种指标监测&#xff08;cpu使用率&#xff0c;cpu温度&#xff0c;内存使用率&#xff0c;磁盘容量&#xff0c;磁盘IO&#xff0c;硬盘SMART健康状态&#xff0c;系统负载&#xff0c;连接数量&…...

前端如何实现本地图片上传?

前端如何实现本地图片上传&#xff1f; 摘要 对于学习前端的小伙伴都有一个困惑&#xff0c;就是平常想上手小项目&#xff0c;但碍于不想购买服务器&#xff0c;实践受到了限制。 一般我选择node.js搭建服务器&#xff0c;毕竟基于JavaScript语言&#xff0c;简直不是一家人…...

【基础算法】差分的应用(一维差分和二维差分)

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…...

第49章 API统一集中管理

1 关于统一集中管理API的一些思考 1、统一集中管理是保证工程性项目得保质、保量、成功实施&#xff0c;并对后期维护提供数据支撑的最有效&#xff0c;最节省资源和时间的技能和做法&#xff0c;软件做为一种特殊的工程性项目&#xff0c;也符合上述特性。 2、由于在前台实现中…...

carla0.9.13-UE4添加4轮车模型(Linux系统)

前期准备建模工具&#xff1a;blender:v3.4.1&#xff1b;可以在Ubuntu Software商店直接下载虚拟引擎&#xff1a;carla-UE4 (carla v0.9.13)&#xff0c;无需额外安装UE4&#xff0c;carla中自带插件编译carla参照官方文档&#xff1a;https://carla.readthedocs.io/en/0.9.1…...

对比yolov4和yolov3

目录 1. 网络结构的不同 1.1 Backbone 1.1.1 Darknet53 1.1.2 CSPDarknet53 1.2 Neck 1.2.1 FPN 1.2.2 PAN 1.2.3 SPP 1.3 Head 2. ​​​​​数据增强​​​​​ 2.1 CutMix 2.2 Mosaic 3. 激活函数 4. 损失函数 5. 正则化方法 知识点 记录备忘。 总体而言&…...

Android ServiceManager

1.ServiceManager ServiceManager在init进程启动后启动,用来管理系统中的Service。 一般开机过程分为三个阶段: ①OS级别,由bootloader载入linux内核后,内核开始初始化,并载入built-in的驱动程序,内核完成开机后,载入init process,切换至user-space后,结束内核的循…...

数据挖掘,计算机网络、操作系统刷题笔记53

数据挖掘&#xff0c;计算机网络、操作系统刷题笔记53 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;orac…...

地球板块运动vr交互模拟体验教学提高学生的学习兴趣

海陆变迁是地球演化史上非常重要的一个过程&#xff0c;它不仅影响着地球的气候、地貌、生物多样性等方面&#xff0c;还对人类文明的演化产生了深远的影响。为了帮助学生更加深入地了解海陆变迁的过程和机制&#xff0c;很多高校教育机构开始采用虚拟现实技术进行教学探究。 V…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

React、Git、计网、发展趋势等内容——前端面试宝典(字节、小红书和美团)

React React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么&#xff0c;Fiber架构&#xff0c;面试向面试官介绍&#xff0c;详细解释 用户: React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么&#xff0c;Fiber架构&#xff0c;面试向面试官介绍&#x…...

【Redis】Redis 的持久化策略

目录 一、RDB 定期备份 1.2 触发方式 1.2.1 手动触发 1.2.2.1 自动触发 RDB 持久化机制的场景 1.2.2.2 检查是否触发 1.2.2.3 线上运维配置 1.3 检索工具 1.4 RDB 备份实现原理 1.5 禁用 RDB 快照 1.6 RDB 优缺点分析 二、AOF 实时备份 2.1 配置文件解析 2.2 开启…...

Continue 开源 AI 编程助手框架深度分析

Continue 开源 AI 编程助手框架深度分析 一、项目简介 Continue 是一个模块化、可配置、跨平台的开源 AI 编程助手框架&#xff0c;目标是让开发者能在本地或云端环境中&#xff0c;快速集成和使用自定义的 LLM 编程辅助工具。它通过支持 VS Code 与 JetBrains 等主流 IDE 插件…...

MongoDB $type 操作符详解

MongoDB $type 操作符详解 引言 MongoDB 是一款流行的开源文档型数据库,它提供了丰富的查询操作符来满足不同的数据查询需求。在 MongoDB 中,$type 操作符是一个非常有用的查询操作符,它允许用户根据文档中字段的类型来查询文档。本文将详细介绍 MongoDB 的 $type 操作符,…...